MySQL查询:如何找到每个品牌的前5张图片?
下面是mysql表中的数据MySQL查询:如何找到每个品牌的前5张图片?,mysql,sql,group-concat,top-n,Mysql,Sql,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 |283
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
如何在每个品牌中找到具有GROUP_CONCAT功能的前5张图片?
作为回报,我希望得到以下几点:
brand_id|image_ids
--------|--------------------------
8 |9
35 |2829,2831,2832,2894
28 |2960,2961,3041,2965,2959
使用
如果您的品脱是要获得每组前5名,那么下面的sql将给出结果:
SELECT A.brand_id, GROUP_CONCAT(A.image_id)
FROM (
SELECT t1.* FROM Table1 AS t1
LEFT JOIN Table1 AS t2
ON t1.brand_id = t2.brand_id AND t1.image_id = t2.image_id AND t1.downloads <= t2.downloads
GROUP BY t1.brand_id, t1.image_id HAVING COUNT(*) <= 5
) A GROUP BY A.brand_id
这并没有得到每个组的前5名,每个组最多5名。数据已经通过内部查询的下载进行排序,所以@Praveen Prasannan查询提供了正确的结果,但我只想知道,表中有200万条记录,所以这个查询执行时需要3.408秒,还有其他更快的方法吗?呼呼。这就是痛苦。每当你得到每个分支id的5条记录时,你应该尝试打破。我现在什么都不知道。让我试试。看它不只是返回5。它又回来了all@PraveenPrasannan这取决于你如何阅读前5名,可能有多个图像具有相同的下载。
SELECT A.brand_id, GROUP_CONCAT(A.image_id)
FROM (
SELECT t1.* FROM Table1 AS t1
LEFT JOIN Table1 AS t2
ON t1.brand_id = t2.brand_id AND t1.image_id = t2.image_id AND t1.downloads <= t2.downloads
GROUP BY t1.brand_id, t1.image_id HAVING COUNT(*) <= 5
) A GROUP BY A.brand_id