2016-08-04 55 views
0

秩我有这样的查询如何根据分数

SELECT  CJ.JOURNAL_ID AS JOURNAL_ID, 
      VOLUME, 
      ISSUE, 
      PAPER_ID, 
      COUNT(PAPER_ID) AS PAPER_COUNT 
FROM  cafet_paper_details CPD 
INNER JOIN CAFET_JOURNAL  CJ ON CJ.JOURNAL_ID = CPD.JOURNAL_ID 
GROUP BY JOURNAL_ID,VOLUME, ISSUE 
ORDER BY JOURNAL_ID,VOLUME 

这给了我下面的结果

JOURNAL_ID VOLUME ISSUE PAPER_ID PAPER_COUNT 
---------- ------ ------ -------- ------------- 
     18 2008 04   33    18 
     18 2009 05   46    3 
     18 2012 03   10    22 
     19 2016 1    9    1 

从上表我想添加基于列“VOLUME_RANK” ASC VOLUME(2008年卷我应该得到volume_rank为1,为2009年2,2010年定为3等)

预期输出

JOURNAL_ID VOLUME ISSUE PAPER_ID PAPER_COUNT VOLUME_RANK 
---------- ------ ------ -------- ------------- ------------ 
     18 2008 04   33    18  1 
     18 2009 05   46    3  2 
     18 2012 03   10    22  5 
     19 2016 1    9    1  9 
+0

你正在使用哪个db? – scaisEdge

+0

如果查询运行,我猜'mysql'。如果没有,'paper_id'必须包含在'group by'子句中... – sgeddes

+0

它会一直是2008年还是当年动态?如果是这样,只需使用'Volume - 2007'如果不是的话,你可以在子查询中选择'Volume'的'min'来做同样的事情...... – sgeddes

回答

0

根据您的描述,你似乎要简单的减法:

SELECT CJ.JOURNAL_ID, VOLUME, ISSUE, PAPER_ID, 
     COUNT(PAPER_ID) AS PAPER_COUNT, 
     (VOLUME - 2007) as VOLUME_RANK 
FROM cafet_paper_details CPD INNER JOIN 
    CAFET_JOURNAL CJ 
    ON CJ.JOURNAL_ID = CPD.JOURNAL_ID 
GROUP BY JOURNAL_ID, VOLUME, ISSUE 
ORDER BY JOURNAL_ID, VOLUME; 
+0

谢谢..这个工作正常 – Madhavi

1
SELECT CJ.JOURNAL_ID AS JOURNAL_ID, 
    VOLUME, 
    (VOLUME -2007) VOLUME_RANK ISSUE, 
           PAPER_ID, 
           COUNT(PAPER_ID) AS PAPER_COUNT 

FROM cafet_paper_details CPD INNER JOIN CAFET_JOURNAL CJ ON CJ.JOURNAL_ID = CPD.JOURNAL_ID GROUP BY JOURNAL_ID, VOLUME , ISSUE ORDER BY JOURNAL_ID, VOLUME

0
with view1 as 
(SELECT  CJ.JOURNAL_ID AS JOURNAL_ID, 
     VOLUME, 
     ISSUE, 
     PAPER_ID, 
     COUNT(PAPER_ID) AS PAPER_COUNT 
FROM  cafet_paper_details CPD 
INNER JOIN CAFET_JOURNAL  CJ ON CJ.JOURNAL_ID = CPD.JOURNAL_ID 
GROUP BY JOURNAL_ID,VOLUME, ISSUE 
ORDER BY JOURNAL_ID,VOLUME 
), 
view2 as (
select JOURNAL_ID, VOLUME, ISSUE, PAPER_ID, PAPER_COUNT, (select min(volume)   from view1) from view1 MIN_VOLUME 
) 
select JOURNAL_ID, VOLUME, ISSUE, PAPER_ID, PAPER_COUNT, MIN_VOLUME, (VOLUME-MIN_VOLUME + 1) rank from view2