2012-03-24 46 views
2

我很新的SQL(我正在使用MySQL),需要一些幫助。我目前正試圖從名爲PERSON的表中選擇最常見的年齡段。假設PERSON有具有值的AGE柱:10,10,20,20,30,該查詢應返回的值10和20SQL選擇最常見的值

以下查詢只檢索頂部行(20):

SELECT AGE FROM PERSON GROUP BY AGE ORDER BY COUNT(*) DESC LIMIT 1; 

我的另一個想法是嘗試類似:

SELECT AGE FROM PERSON GROUP BY AGE HAVING COUNT(AGE) = MAX(COUNT(AGE)); 

這將返回一個錯誤,指出它是無效使用組功能。

任何幫助將不勝感激。謝謝!

回答

3

這樣做:

select age from persons 
group by age 
having count(*) = (
    select count(*) from persons 
    group by age 
    order by count(*) desc 
    limit 1) 
+0

似乎是一個合法的-1^O) – 2012-03-24 18:18:11

3
SELECT *, COUNT(AGE) as age_count 
FROM PERSON 
GROUP BY AGE 
ORDER BY age_count DESC 
LIMIT 1 

不能在這裏測試,但它應該工作。

0
WITH x AS (
    SELECT age, COUNT(*) numOfAge 
    FROM person 
    GROUP BY age 
) 
SELECT age 
    FROM x 
    WHERE numOfAge = (SELECT MAX(numOfAge) FROM x) 
    ORDER BY age