2011-11-16 55 views
0

CD表返回藝術家所以表結構是這樣的憑藉超過1張CD

  CD id  |   Artist id 

我想在一個以上的CD返回多次出現在該表中的藝術家,如。

我在使用Mysql,所以最好的SQL查詢是做什麼的?

回答

3

首先你組由artist_id您的記錄,那麼你可以使用HAVING條款,它允許您過濾基於彙總資料,如COUNT,或SUM

SELECT Artist_id, COUNT(1) 
FROM yourTable 
GROUP BY Artist_id 
HAVING COUNT(1) > 1 

簡短說明: 這查詢將選擇藝術家,以及次數的計數它們在表(在這種情況下光盤的數目)

COUNT聚集在GROUP BY條款,所以它會算每組

HAVING子句然後說,我們只想返回具有COUNT(1) > 1的記錄,這將指示此表的CD數量。

+0

這將是美好的,如果你可以給一個簡短的解釋,我已經出與SQL觸摸的:) – theReverseFlick

+0

爲什麼不選擇DISTINCT Artist_id from my_table HAVING COUNT(Artist_id)> 1;工作? – theReverseFlick

+1

這種方法可行,但您也必須在您的'FROM'和'HAVING'語句之間添加'GROUP BY Artist_id'。我也採取了我的方法,因爲這種類型的問題通常會導致「每個藝術家有多少CD」,所以當我開始時我就是以這種思維方式:) –

0
SELECT Artist_id, COUNT(0) as `cdCount` 
FROM tableName 
GROUP BY Artist_id 
HAVING cdCount > 1; 

這應該給你的藝術家超過1張CD(亞當已作解釋)

爲了得到一個與最大的CD,有2種方式:

(a)您爲了通過計數,然後選擇第一個

SELECT Artist_id, COUNT(0) as cdCount 
FROM tableName 
GROUP BY Artist_id 
HAVING cdCount > 1 
ORDER BY cdCount 
LIMIT 0, 1; 

但是,這不會給你所有的藝術家,如果你有超過1名藝術家與CDS

的最大#

在這種情況下,使用

(B)

SELECT * FROM 
(SELECT Artist_id, COUNT(0) as cdCount 
FROM tableName 
GROUP BY Artist_id) t 
HAVING cdCount = MAX(t.cdCount);