2014-01-07 4 views
2

Следующие данные в таблице mysql.Запрос MySQL: Как я могу найти 5 лучших изображений в каждой торговой марке?

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 

Как я могу найти топ-5 изображений с GROUP_CONCAT функции в каждой марке? И я хотел бы получить следующее в ответ:

brand_id|image_ids     
--------|-------------------------- 
8  |9      
35  |2829,2831,2832,2894  
28  |2960,2961,3041,2965,2959 

ответ

4

Использование SUBSTRING_INDEX

SELECT 
    brand_id, 
    SUBSTRING_INDEX(GROUP_CONCAT(image_id SEPARATOR ','),',',5) AS image_ids 
FROM Table1 
GROUP BY brand_id 

fiddle

+1

Благодаря @Praveen Prasannan, он работает мне – Girish

+0

рад помочь у братан. –

+0

Это не входит в первую пятерку каждой группы, всего до 5 из каждой группы. – xdazz

3

Если пинта, чтобы получить топ 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 

SQL Fiddle

+0

http://sqlfiddle.com/#!2/1667a/1. Посмотрите .. он не возвращается только 5. он возвращает все –

+0

@PraveenPrasannan Это зависит от того, как вы читаете 'top 5' , может быть несколько изображений с одинаковыми загрузками. – xdazz