gpt4 book ai didi

mysql选择每组的前n行

转载 作者:可可西里 更新时间:2023-11-01 06:43:50 27 4
gpt4 key购买 nike

我读过这篇文章:http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/并搜索其他问题

我有一个类似这样的表:

| table.id    | USER.id
----------------------------------------------
| 1 | 101
| 2 | 101
| 3 | 101
| 4 | 101
| 5 | 101
| 6 | 101
| 7 | 101
| 8 | 101
| 9 | 101
| 10 | 101
| 11 | 102
| 12 | 102
| 13 | 102
| 14 | 102
| 15 | 103
| 16 | 103
| 17 | 103
| 18 | 103
| 19 | 103
| 20 | 103
| 21 | 103
| 22 | 103
| 23 | 103
| 24 | 104
| 25 | 104
| 26 | 104
| 27 | 104
| 28 | 104
| 29 | 104
| 30 | 105
| 31 | 105
| 32 | 105
| 33 | 106
| 34 | 106

我正在尝试获取按 user.id 分组的 table.id 的计数,如果 user.id 的计数大于 7,则只将结果显示为 7(也就是将计数结果限制为 7)。

在这个例子中,结果应该是:

| USER.id         | count of table.ID
----------------------------------------
| 101 | 7
| 102 | 4
| 103 | 7
| 104 | 6
| 105 | 3
| 106 | 2

我试过:

SELECT USERid, COUNT(table.id)
FROM table
WHERE table.id IN (select top 7 table.id from table)
GROUP BY USERid

SELECT USERid, COUNT(table.id)
FROM table
WHERE (
SELECT COUNT(table.ID) FROM table as t
WHERE t.id = t.id AND t.USERid <= table.USERid
) <= 7
GROUP BY USERid

最佳答案

您可以简化查询,并使用 LEAST功能

SELECT USERid, LEAST(7, COUNT(*))
FROM table
GROUP BY USERid

来自您评论中的问题

SELECT SUM(countByUser) 
FROM
(SELECT LEAST(7, COUNT(*)) as countByUser
FROM table
GROUP BY USERid) c

SqlFiddle

关于mysql选择每组的前n行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19168834/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com