2016-02-06 54 views
0

我需要选择我已经达到的最大聚合数的“作业角色描述”。表格如下所示。SQL选择最大聚合记录

[Job Role Description] | [Number Of Placements] 
------------------------------------------------ 
Training BI      24 
System Analyst     23 
Data Analyst     24 
Data consultant     25 
DB programmer     24 

job_role_desc列是从由job_role_id加入另一个表。我使用下面的代码来实现这一点。

SELECT 
    job_role_dim.job_role_desc AS "Job Role Description" , 
    SUM(fact_accounts.no_of_placements) AS "Number Of Placements" 
FROM 
    fact_accounts 
INNER JOIN 
    job_role_dim ON job_role_dim.job_role_id = fact_accounts.fk3_job_role_id 
GROUP BY 
    job_role_dim.job_role_desc 

如何修改上面的代码仅显示有广告刊登位置的最大数量的job_role_desc?感谢您的帮助。

回答

2

您可以使用row_number()dense_rank()

SELECT ja.* 
FROM (SELECT j.job_role_desc AS "Job Role Description" , 
      SUM(a.no_of_placements) AS "Number Of Placements", 
      ROW_NUMBER() OVER (ORDER BY SUM(a.no_of_placements) DESC) as seqnum 
     FROM fact_accounts a INNER JOIN 
      job_role_dim j 
      ON j.job_role_id = a.fk3_job_role_id 
     GROUP BY j.job_role_desc 
    ) ja 
WHERE seqnum = 1; 

如果你想所有版本最大,然后用dense_rank()rank()

+0

谢谢。有没有办法只选择没有no_of_placements或row_number的job_role_desc? – DazedNConfused

+0

@DazedNConfused。 。 。是的,只需将你想要的列放在外部'select'而不是'*'中。 –

+0

非常感谢! – DazedNConfused