2016-01-20 82 views
0

我有一個名爲food表:使用查找最頻繁的看到collumn_name最大

CREATE TABLE food(
name varchar(30) primary key, 
type varchar(30) 
); 

我想找到出現在該表中的大部分時間type

我能找到這個使用

SELECT type 
FROM food 
GROUP BY type 
ORDER BY count(type) DESC 
LIMIT 1 

limit 1未列入標準。如何使用MAX找到相同的結果?例如我想要類似

SELECT type 
FROM food 
GROUP BY type 
HAVING count(type) = MAX(count(type)); 

HAVING count(type) = MAX(count(type));是不允許的。

+1

的ANSI SQL替代'LIMIT 1'是'FETCH FIRST 1個ROW'。如果兩種類型具有相同的最大行數,那麼添加'WITH TIES'並且你會得到兩行。 (不幸的是,還沒有被很多dbms產品支持。) – jarlh

回答

2

可能不是有效

SELECT type 
FROM food 
GROUP BY type 
HAVING COUNT(type) = 
(
    SELECT MAX(counting) FROM 
    (
     SELECT COUNT(type) AS counting 
     FROM food 
     GROUP BY type 
    ) t 
) 
1

使用,你用COUNTGROUP BY的CTE(公共表表達式):

with cte as 
(
    SELECT type, count(*) as cnt 
    FROM food 
    GROUP BY type 
) 
select type from cte 
where cnt = (select max(cnt) from cte) 

將返回兩行,如果有一個領帶。

(我不知道這是否會比Madhivanan的答案有相同或更好的性能。少打字反正。)