2013-09-05 80 views
1

我想選擇5個最暢銷的文章。此查詢的如何在查詢中對GROUP BY的結果進行分組?

SELECT ID, shop, article_nr, count(*) as count 
FROM table 
GROUP BY shop, article_nr 
ORDER BY count DESC 
LIMIT 5 

結果:

ID | shop | article_nr | count 
-------------------------------------- 
71 | amazon | 123  | 280 
98 | amazon | 223  | 170 
35 | amazon | 323  | 99 
7 | ebay | 456  | 71 
11 | amazon | 789  | 49 
4 | ebay | 032  | 10 

如何在第二個步驟(也許編輯查詢)組此結果被列「店」?

它應該是這樣的(前5只 '一' 店):

ID | shop  | article_nr | count 
-------------------------------------- 
71 | amazon  | 123   | 280 
7 | ebay  | 456   | 71 
.. | shop_x  | ...   | 55 
.. | shop_y  | ...   | 40 
.. | shop_z  | ...   | 37 

有人能幫助我嗎?

+1

考慮提供完整的DDL和/或相同sqlfiddle什麼。 – Strawberry

+0

如果您有同一店鋪的兩篇文章,並且具有相同的計數,那麼您希望兩篇文章,或者,如果沒有,哪篇文章最早是最早的ID? –

+0

@Tony Hopkinson - 按日期排序 – user2751462

回答

0

人氣和很好的描述回答你的問題就在這裏:https://stackoverflow.com/a/612268/1803682

具體我該如何選擇聚合函數(列)不同的(其它列)

我會很樂意幫助,如果你想了解更多在SQL小提琴中玩這個併發布它。

1

這是你想要

SELECT id, shop, article_nr, count FROM table n 
WHERE count = (SELECT MAX(count) FROM table GROUP BY shop HAVING shop = n.shop) LIMIT 5; 
+0

看起來您在此做出這樣的假設,即count是列而不是查詢的聚合結果。如果是這種情況,這將起作用,但如果您查看原始查詢,則會注意到count列來自最初的分組。 – Matthew

+0

馬修是對的,伯爵不是專欄。 – user2751462