在每个 GROUP BY 组中选择第一行?
本教程将介绍在每个 GROUP BY 组中选择第一行?的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。
问题描述
正如标题所示,我想选择用 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 组中选择第一行?的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。