sql 选择每个GROUP BYgroup中的第一行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 选择每个GROUP BYgroup中的第一行相关的知识,希望对你有一定的参考价值。

/*
On Oracle 8i+, SQL Server 2005+, PostgreSQL 8.4+, DB2, Firebird 2.1+, Teradata, Sybase, Vertica:
*/
WITH summary AS (
    SELECT p.id, 
           p.customer, 
           p.total, 
           ROW_NUMBER() OVER(PARTITION BY p.customer 
                                 ORDER BY p.total DESC) AS rk
      FROM PURCHASES p)
SELECT s.*
  FROM summary s
 WHERE s.rk = 1;
 
 /*
 Supported by any database:
 But you need to add logic to break ties
 */
SELECT MIN(x.id),  -- change to MAX if you want the highest
     x.customer, 
     x.total
FROM PURCHASES x
JOIN (SELECT p.customer,
             MAX(total) AS max_total
        FROM PURCHASES p
    GROUP BY p.customer) y ON y.customer = x.customer
                          AND y.max_total = x.total
GROUP BY x.customer, x.total

-- Reference: http://stackoverflow.com/a/3800572

以上是关于sql 选择每个GROUP BYgroup中的第一行的主要内容,如果未能解决你的问题,请参考以下文章

SQL中的group by为啥是按照分组的第二个字段排序的呢?

MySQL获取group后所有组的第一条数据

如何为 MySQL 中的每个组选择第一行?

与 GROUP BY 结合的第一条记录

在 Access 2007 SQL 中的 Group By 聚合函数中计数 Distinct

order bygroup byhaving的区别