2010-02-19 54 views
8

我意識到這很容易,但我的SQL最好是基本的。如何計算行組並顯示頂部/底部3

可以說我有一個包含訂單列表的表格,其中item_id是其中的一列。我需要顯示至少3個(或3個)最受歡迎的物品訂單。

我知道我需要使用item_id對訂單進行分組,然後對它們進行計數。然後我需要按降序(或升序)顯示底部(或頂部)3。我只是不完全確定如何構建這樣的查詢。

+0

我的英語是不夠的,我明白 「項目的3個最受歡迎的訂單」。只有我嗎? – Quassnoi 2010-02-19 17:19:08

+0

不只是你。我認爲OP的意思更像是:「我需要顯示三個最有序的項目。」 – bernie 2010-02-19 17:22:18

+1

歡迎來到StackOverflow。 – 2010-02-19 17:31:50

回答

10

Sql Server中

SELECT TOP 3 item_id, COUNT(*) as itemcount 
FROM table 
GROUP BY item_id ORDER BY itemcount 

並添加DESC訂購血統

3
select item_id, count(*) 
from table 
group by item_id; 

會給你整個列表。

底3:

select item_id 
from (
    select item_id, count(*) as cnt 
    from table 
    group by item_id 
    order by cnt 
) where rownum < 4; 

前3:

select item_id 
from (
    select item_id, count(*) as cnt 
    from table 
    group by item_id 
    order by cnt desc 
) where rownum < 4; 

注:本sytnax是Oracle。如果你有MySQL,或者使用SQL,那麼使用LIMIT。

ORDER BY會對您的結果進行排序。升序是默認的,所以如果你想得到最大的值,使用'desc'。

GROUP BY(與計數一起使用時(*))將計算的類似對象

其中的rownum < 4的基團:這是預言是做了LIMIT的。它返回已經運行的查詢的前三行。 where子句在訂單子句之前運行,所以您必須將其作爲嵌套查詢來執行。

+0

爲什麼downvote沒有評論? – 2010-02-19 17:25:34

+0

@quassnoi:我們在同一時間編輯它:我把你的編輯翻回來,然後把它們包括在內,這樣我添加的文本就會在那裏。 – 2010-02-19 17:27:25

2

MySQL

SELECT item_id, COUNT(*) AS cnt 
FROM orders 
GROUP BY 
     item_id 
ORDER BY 
     cnt DESC 
LIMIT 3 
3

對於SQL Server:

select top 3 item_id, count(item_id) 
from  table 
group by item_id 
order by count(item_id) desc 

會給你3個最流行的ITEM_ID的

使用:

order by count(item_id) 

會給你至少3頁opular ITEM_ID的

+0

這個答案是什麼dbms? – 2010-02-19 17:20:17

+0

@David:'SQL Server' – Quassnoi 2010-02-19 17:23:48