在每个 GROUP BY 组中选择第一行?

本教程将介绍在每个 GROUP BY 组中选择第一行?的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

在每个 GROUP BY 组中选择第一行? 教程 第1张

问题描述

正如标题所示,我想选择用 GROUP BY 分组的每组行的第一行.

具体来说,如果我有一个如下所示的 purchases 表:

SELECT * FROM purchases;

我的输出:

身份证 客户 总计
1 5
2 莎莉 3
3 2
4 莎莉 1

我想查询每个客户的最大购买量(total)的id.像这样的:

SELECT FIRST(id), customer, FIRST(total)
FROM  purchases
GROUP BY customer
ORDER BY total DESC;

预期输出:

FIRST(id) 客户 FIRST(总计)
1 5
2 莎莉 3

推荐答案

在 支持CTE和窗口函数:

WITH summary AS (
 SELECT p.id, 
  p.customer, 
  p.total, 
  ROW_NUMBER() OVER(PARTITION BY p.customer 
ORDER BY p.total DESC) AS rank
FROM PURCHASES p)
 SELECT *
FROM summary
 WHERE rank = 1

任何数据库都支持:

但你需要添加逻辑来打破关系:

  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

好了关于在每个 GROUP BY 组中选择第一行?的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。