gpt4 book ai didi

mysql - mysql中每组前N个Sql问题

转载 作者:行者123 更新时间:2023-11-29 14:45:05 25 4
gpt4 key购买 nike

请问,我在从类似于下面所示的数据集中查询每个类别的前 N ​​个时遇到问题。我已经看到了有关此问题的各种线索,但我在调整他们的查询以适应我的具体问题时遇到问题。

+----+---------------------------------+-------+
| ID | Prod |Cat Id |
+----+---------------------------------+-------+
| 1 | kntrn | 1 |
| 2 | kntrn e | 1 |
| 3 | e spl | 1 |
| 4 | spl php | 1 |
| 5 | php cicarredgtal | 1 |
| 6 | cicarredgtal servecounterstrike | 1 |
| 7 | servecounterstrike com | 1 |
| 8 | zlv | 2 |
| 9 | zlv enter | 2 |
| 10 | spl php | 2 |
+----+---------------------------------+-------+

我想根据此规则进行分组 (1) 为每个 catid 选择前 3 个产品。

请注意,从这个意义上说,顶部是所有类别中产品数量最多的一个。

因此,对于上面的示例,spl php 的 catID 1 最高,因为它在所有类别中出现两次。

最佳答案

这可能不是很漂亮,但我认为它会起作用:

SELECT cat_id, prod, pos FROM (
SELECT cat_id, pos, prod, if(@last_id = cat_id, @cnt := @cnt + 1, (@cnt := 0 || @last_id := cat_id)) cnt
FROM (
SELECT p.cat_id, pseq.cnt pos, pseq.prod
FROM (
SELECT prod, count(*) cnt FROM prods GROUP BY prod ORDER BY cnt DESC
) pseq
INNER JOIN prods p ON p.prod = pseq.prod
ORDER BY cat_id, pseq.cnt DESC
) po
) plist
WHERE cnt <= 3;

Based on the above data, this will return:
+--------+-----------+-----+
| cat_id | prod | pos |
+--------+-----------+-----+
| 1 | spl php | 2 |
| 1 | kntrn | 1 |
| 1 | kntrn e | 1 |
| 2 | spl php | 2 |
| 2 | zlv | 1 |
| 2 | zlv enter | 1 |
+--------+-----------+-----+

关于mysql - mysql中每组前N个Sql问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7133574/

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