2011-11-15 59 views
0

我有一個充滿媒體的數據庫。爲了簡便起見,可以說,它有選擇一列的最大值,由另一列分組是不行的

Table: media 

id 
college_id 
title 
shares 

我試圖讓來自各個學院的最大量股份的條款。所以,從本質上講,可以從康奈爾大學,南加州大學,錫拉丘茲大學獲得頂級共享文章。

我一直在使用這個SQL命令,但它並沒有返回每個大學最共享的文章。

SELECT * 
FROM media 
GROUP BY college_id 
ORDER BY shares DESC 

任何人有什麼想法?

股票列是一個整數,指示股票數量。

+1

SQL只是一種查詢語言,您使用的是什麼服務器/版本? –

+0

@Adam:但我們有一個SQL標準。咳咳。 –

+0

對不起@ muistooshort,我不知道你的意思。 –

回答

4
SELECT top 1 * from media group by college_id order by shares desc 

這是我的第一個想法......雖然我不知道如果我失蹤因爲這個答案比Adam的簡單得多。如果份額是它被共享的次數,雖然這聽起來像你要找的東西。

編輯:我明白了。這是另一種方式...

select m1.id, m1.college_id, m1.title, m1.shares 
    from media m1 join 
    (
     select college_id, max(shares) max_shares 
     from media 
     group by college_id 

    ) m2 on m1.college_id = m2.college_id and m1.shares = m2.max_shares 

這將返回一個以上的文章,每個大學在有領帶的情況下。如果你想要或不想,我不會。

+0

這與亞當溫格的做法非常相似......只是沒有CTE而沒有分區。不應該是任何在MySql上不起作用的東西。 –

+0

不錯的做法布蘭登+1 –

+0

這工作太棒了!欣賞它!感謝所有人的幫助。對不起,沒有指定這是MySQL的前期(我會確保下一次)。 –

0

如果我們假設股票列控的股數的查詢是,

SELECT title, 
     Max(shares) AS max 
FROM media 
GROUP BY college_id 
ORDER BY max DESC 

但如果我們假設股票列是ID或某事,查詢會,

SELECT title, 
     COUNT(shares) AS COUNT 
FROM media 
GROUP BY college_id 
ORDER BY COUNT DESC 

我建議你下次再提供更多細節。

+0

這些查詢將給出大學內所有文章的所有份額的總數,但它不會告訴哪篇文章的份額最多。 –

+0

股票列保存一個整數,指出股份數量。我嘗試了你的第一個查詢,但添加了標題...它仍然顯示結果的錯誤標題'SELECT MAX(股份),title作爲媒體組的最大值由college_id order by max desc;' –

+0

你是對的@ AdamWenger。更新。 – tuze

0

您正在尋找MAX SQL關鍵字

在MSSQL這只是正常

SELECT college_id, 
     Max(shares) 
FROM media 
GROUP BY college_id 
相關問題