2013-08-27 253 views
3

我在表中有三列:id,streetname,count。對於某些ID而言,不止是一個街道名稱。計數表明相應的街道被分配給該ID的頻率。我怎樣才能得到最高的ID和街道名稱。SQL SELECT MAX COUNT

示例表:

id  streetname  count 
1  street1  80 
1  street2  60 
1  street3  5 
2  street4  10 
2  street5  6 

結果應該是這樣的:

id  streetname 
1  street1 
2  street4 

提前感謝!

+0

SELECT ID,STREETNAME FROM表ORDER BY COUNT DESC,然後獲取只有一個 – BigMike

+2

一行沒有ü嘗試什麼嗎? –

+2

歡迎來到Stack Overflow!請通過添加適當的標記(Oracle,SQL Server,MySQL等)來指定您要定位的RDBMS。可能會有利用不被普遍支持的語言或產品功能的答案。此外,通過使用特定的RDBMS標記它,您的問題可能會得到更適合回答的人的關注。 – Taryn

回答

6

沒有指定但您應該可以使用以下內容:

select t1.id, t1.streetname, t1.count 
from yourtable t1 
inner join 
(
    select id, max(count) max_count 
    from yourtable 
    group by id 
) t2 
    on t1.id = t2.id 
    and t1.count = t2.max_count 

請參閱SQL Fiddle with Demo。請注意,您必須使用MySQL的反引號或數據庫用於轉義保留字的任何字符來避免count列名。我的建議是避免爲列和表名使用保留字。

+0

謝謝,這正是我需要的!但現在還有另一個問題:不應該顯示具有相同最大值的所有ID,因爲它們不是唯一的... – user2721421

+0

@ user2721421我不確定您的意思,但是如果您有多個具有相同街道名稱的ID並計數,那麼你應該能夠使用不同的。你能用更多的示例數據編輯sql小提琴(http://sqlfiddle.com/#!2/17dae/1)來進一步解釋問題嗎? – Taryn

+0

我將SQL小提琴(http://sqlfiddle.com/#!2/86465/1/0)更改爲我的需要。身份證和計數是一樣的,但街道不同。在結果中應該消除ID 3,以便只有唯一的ID 1和2.關於ID 3,我不能做任何說明,因爲結果的加權是相同的。順便說一句,SQL Fiddle是一個不錯的工具! – user2721421

0

我不認爲這是沒有唯一列名「ID」以正確的方式,但你的問題應該已經通過這個查詢解決:您所使用的數據庫

SELECT id, streetname FROM table ORDER BY count DESC 
+0

請檢查您的代碼,它選擇所有的ID和街道名稱。 –

+0

他沒有指定他想要選擇多少條記錄,對嗎?我做出這個答案只是爲了選擇由count指定的id和streetname。如果我誤解了這個問題,我很抱歉。 – OutOfSpaceHoneyBadger

0

試試這個

SELECT T1.id, T1.streetname FROM TableName T1 
INNER JOIN 
(
SELECT id, MAX(count) maxcnt FROM TableName 
GROUP BY id 
) T2 
ON T1.id= T2.id AND T1.count = T2.maxcnt 

SQL FIDDLE DEMO