2016-01-20 4 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 Альтернативой '' 1' LIMIT является '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

Используйте КТР (общее выражение таблицы), где вы делаете GROUP BY с COUNT:

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 в. Меньше набрав в любом случае.)

 Смежные вопросы

  • Нет связанных вопросов^_^