2015-10-04 57 views
1

因此,我搜索了很多這個主題,並且它有效,因此它獲得了最高的發生次數,但是我想讓SQL獲取任意數量(如果有多個值最高金額)。 現在我有:沒有使用限制的最大發生次數

SELECT houses.cars, COUNT(houses.cars) as Numb 
FROM houses 
Group By houses.cars Order By Numb Desc 
Limit 1; 

返回出現的次數最多,但例如,如果有2種型號的汽車有8個出現的,我希望它返回他們兩個。

我知道這是你如何做到這一點,當你想要的最高值時,他們的持續時間(整數):

SELECT times.duration AS 'Hour', 
FROM times 
WHERE times.duration >= (SELECT MAX(times.duration) 
         FROM times); 

,但只要我嘗試做類似的邏輯與COUNT它給語法錯誤。預先感謝您的幫助。

回答

4

爲了保持聯繫,你可以使用having子句與子查詢:

小提琴:http://www.sqlfiddle.com/#!7/ce7ec/6/0

select cars, 
     count(*) 
    from houses 
group by cars 
having count(*) = (select max(num_occur) 
        from (select cars, 
            count(*) as num_occur 
          from houses 
          group by cars)) 

如果您正在使用Oracle或SQL Server,你可以做到這一點沒有子查詢:

使用Oracle 12c的這樣的解決方案:

select cars, 
     count(*) 
    from houses 
group by cars 
order by 2 desc 
fetch first 1 rows with ties; 

這樣的解決方案使用SQL Server:

select top(1) with ties 
     cars, 
     count(*) 
    from houses 
group by cars 
order by 2 desc; 
+0

有沒有辦法不使用子查詢嗎? – Amee

+0

@Amee不與sqllite。在其他數據庫中,例如Oracle和SQL Server,您可以使用'with ties'選項,這樣可以在沒有子查詢的情況下執行此操作。 –