Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询:如何找到每个品牌的前5张图片?_Mysql_Sql_Group Concat_Top N - Fatal编程技术网

MySQL查询:如何找到每个品牌的前5张图片?

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

下面是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  
如何在每个品牌中找到具有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