繁体   English   中英

选择按两列分组的最大值

[英]selecting max values grouped by two column

我有一个像这样的简单表

firstname, lastname , nb_payments
a, b , 10
a, b , 20
b, a , 30
b, a , 40
b, b , 50

我想选择按夫妇名字,姓氏分组的3笔最高付款额

所需的输出是这样的

firstname, lastname , top3
b, a , 70
b, b , 50
a, b , 30

我做了这个查询: SELECT firstname, lastname , nb_payments as top3 FROM account ORDER BY nb_payments DESC LIMIT 3

但它并没有添加按夫妻名字,姓氏分组的nb_payments

任何帮助将不胜感激,非常感谢

您需要按firstnamelastname对付款和分组进行firstname

SELECT   firstname, lastname , SUM(nb_payments) 
FROM     account 
GROUP BY firstname, lastname
ORDER BY 3 DESC LIMIT 3

我认为这会产生你想要的输出:

select firstname, lastname, sum(nb_payments)
from (select t.*,
             row_number() over (partition by firstname, lastname
                                order by nb_payments desc) as seqnum
      from table t
     ) t
where seqnum <= 3
group by firstname, lastname;

如果有帮助,这就是我在oracle中写的方式。 还有其他方法。

select * from(
    SELECT firstname, lastname , sum(nb_payments) as top3 FROM test group by firstname,lastname ORDER BY top3 desc )
    where rownum <=3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM