我意識到這很容易,但我的SQL最好是基本的。如何計算行組並顯示頂部/底部3
可以說我有一個包含訂單列表的表格,其中item_id
是其中的一列。我需要顯示至少3個(或3個)最受歡迎的物品訂單。
我知道我需要使用item_id
對訂單進行分組,然後對它們進行計數。然後我需要按降序(或升序)顯示底部(或頂部)3。我只是不完全確定如何構建這樣的查詢。
我意識到這很容易,但我的SQL最好是基本的。如何計算行組並顯示頂部/底部3
可以說我有一個包含訂單列表的表格,其中item_id
是其中的一列。我需要顯示至少3個(或3個)最受歡迎的物品訂單。
我知道我需要使用item_id
對訂單進行分組,然後對它們進行計數。然後我需要按降序(或升序)顯示底部(或頂部)3。我只是不完全確定如何構建這樣的查詢。
在Sql Server中:
SELECT TOP 3 item_id, COUNT(*) as itemcount
FROM table
GROUP BY item_id ORDER BY itemcount
並添加DESC訂購血統
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子句在訂單子句之前運行,所以您必須將其作爲嵌套查詢來執行。
爲什麼downvote沒有評論? – 2010-02-19 17:25:34
@quassnoi:我們在同一時間編輯它:我把你的編輯翻回來,然後把它們包括在內,這樣我添加的文本就會在那裏。 – 2010-02-19 17:27:25
在MySQL
:
SELECT item_id, COUNT(*) AS cnt
FROM orders
GROUP BY
item_id
ORDER BY
cnt DESC
LIMIT 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的
這個答案是什麼dbms? – 2010-02-19 17:20:17
@David:'SQL Server' – Quassnoi 2010-02-19 17:23:48
我的英語是不夠的,我明白 「項目的3個最受歡迎的訂單」。只有我嗎? – Quassnoi 2010-02-19 17:19:08
不只是你。我認爲OP的意思更像是:「我需要顯示三個最有序的項目。」 – bernie 2010-02-19 17:22:18
歡迎來到StackOverflow。 – 2010-02-19 17:31:50