2013-01-10 88 views
9

擁有帶item_id和color_id的產品表。我試圖讓color_id與最非空的實例。SELECT ID擁有最多ID的編號

這種失敗:

SELECT color_id 
    FROM products 
WHERE item_id=1234 
GROUP BY item_id 
HAVING MAX(COUNT(color_id)) 

Invalid use of group function 

SELECT color_id, COUNT(color_id) 
    FROM products 
WHERE item_id=1234 
GROUP BY item_id 

返回

color_id count 
1, 323 
2, 122 
3, 554 

我正在尋找color_id 3,它具有最多的實例。

有沒有一種快速簡單的方法來獲得我想要的而沒有2個查詢?

回答

13
SELECT color_id AS id, COUNT(color_id) AS count 
FROM products 
WHERE item_id = 1234 AND color_id IS NOT NULL 
GROUP BY color_id 
ORDER BY count DESC 
LIMIT 1; 

這將爲您提供color_id和color_id上的計數,順序由count從最大到最小。我認爲這是你想要的。


爲您編輯...

SELECT color_id, COUNT(*) FROM products WHERE color_id = 3; 
+0

檢查我的編輯 - 我typoed在WHERE列。 –

+0

您應該添加一個「限制1」來回答問題。 –

+0

剛剛檢查出它的工作原理 - 謝謝。 –

4
SELECT color_id 
FROM 
    (
     SELECT color_id, COUNT(color_id) totalCount 
     FROM products 
     WHERE item_id = 1234 
     GROUP BY color_id 
    ) s 
HAVING totalCount = MAX(totalCount) 

更新1

SELECT color_id, COUNT(color_id) totalCount 
FROM products 
WHERE item_id = 1234 
GROUP BY color_id 
HAVING COUNT(color_id) = 
(
    SELECT COUNT(color_id) totalCount 
    FROM products 
    WHERE item_id = 1234 
    GROUP BY color_id 
    ORDER BY totalCount DESC 
    LIMIT 1 
) 
+0

我很欣賞這個回覆。謝謝。 –

1
SELECT 
    color_id, 
    COUNT(color_id) AS occurances 
FROM so_test 
GROUP BY color_id 
ORDER BY occurances DESC 
LIMIT 0, 1 

下面是一個簡單撥弄着一個基本的表格顯示它的工作:sql fiddle