Gir*_*ish 4 mysql sql select group-concat top-n
MySql表中的以下数据.
brand_id|image_id|downloads
--------|--------|---------
8 |9 |8
35 |2829 |4
28 |2960 |3
28 |2961 |3
28 |3041 |3
35 |2831 |3
28 |2965 |3
35 |2832 |3
28 |2959 |2
28 |2976 |2
35 |2894 |2
Run Code Online (Sandbox Code Playgroud)
如何GROUP_CONCAT在每个品牌中找到具有功能的前5个图像我想跟随返回
brand_id|image_ids
--------|--------------------------
8 |9
35 |2829,2831,2832,2894
28 |2960,2961,3041,2965,2959
Run Code Online (Sandbox Code Playgroud)
以下查询提供预期结果
SELECT brand_id, SUBSTRING_INDEX(GROUP_CONCAT(image_id SEPARATOR ','),',',5) AS image_ids
FROM Table1
GROUP BY brand_id
Run Code Online (Sandbox Code Playgroud)
我有一个大量的数据约2MILION记录表和brand_id,image_id都重复每个用户下载所以当我运行查询我得到以下错误
MySql Error: %d line(s) were cut by GROUP_CONCAT()
Run Code Online (Sandbox Code Playgroud)
我认为GROUP_CONCAT范围超出了,你能不能提供解决方案,所以每个品牌只能获得前5个下载,所以不需要SUBSTRING_INDEX功能.
谢谢
试试这个:
SELECT brand_id, GROUP_CONCAT(image_id) image_ids
FROM (SELECT brand_id, image_id,
IF(@lastBrandId = @lastBrandId:=brand_id, @Idx:=@Idx+1, @Idx:=0) rowNumber
FROM Table1, (SELECT @lastBrandId:=0, @Idx:=0) A
ORDER BY brand_id, downloads DESC
) AS A
WHERE rowNumber < 5
GROUP BY brand_id
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
368 次 |
| 最近记录: |