2016-02-06 2 views
-2

Мне нужен запрос, чтобы вернуть верхние 3 значения числа в каждой группе - могу ли я это сделать?верните верхние 3 значения числа в каждой группе, используя SQL

Так что, если я в настоящее время используется (составленную пример)

SELECT Client, Colour, COUNT(*) 
FROM tblOrders 
GROUP BY Client, Colour 
ORDER BY Client, Colour, COUNT(*) DESC 

получить

Client A|Green|275 
Client A|Red|189 
Client A|Blue|154 
Client A|Purple|133 
Client A|Black|14 
Client B|Red|1025 
Client B|Yellow|888 
Client B|Blue|684 
Client B|Brown|89 

, но я только хочу

Client A|Green|275 
Client A|Red|189 
Client A|Blue|154 
Client B|Red|1025 
Client B|Yellow|888 
Client B|Blue|684 
+0

ah crap - первый урок, чем использовать форматирование досок - извинения! –

+1

Если вы хотите получить максимум 5 счетчиков, используйте только группу по количеству и ограничьте результат до 5 строк. Как это делается, зависит от базы данных, о которой вы не указали. – DBug

+2

Какая СУБД вы используете? –

ответ

0

Это можно сделать с помощью ANSI стандарт ROW_NUMBER() функция:

SELECT Client, Colour, cnt 
FROM (SELECT Client, Colour, COUNT(*) as cnt, 
      ROW_NUMBER() OVER (PARTITION BY Client ORDER BY COUNT(*) DESC) as seqnum 
     FROM tblOrders o 
     GROUP BY Client, Colour 
    ) cc 
WHERE seqnum <= 3 
ORDER BY Client, Colour, cnt DESC; 
+0

Не думайте, что MySQL поддерживает ROW_NUMBER() – DBug

+3

@DBug: вы правы. MySQL не поддерживает [современный SQL] (http://modern-sql.com/slides), но нет никаких указаний на то, что Мэтт использует MySQL (и, по существу, каждая другая СУБД их поддерживает) –

+1

вправо, поэтому пока мы не увидим, что такое СУБД, невозможно ответить – DBug