Как найти наиболее частое значение в заданном столбце в таблице SQL?
Например, для этой таблицы он должен возвращаться, two
поскольку это наиболее частое значение:
one
two
two
three
Как найти наиболее частое значение в заданном столбце в таблице SQL?
Например, для этой таблицы он должен возвращаться, two
поскольку это наиболее частое значение:
one
two
two
three
Ответы:
SELECT `column`,
COUNT(`column`) AS `value_occurrence`
FROM `my_table`
GROUP BY `column`
ORDER BY `value_occurrence` DESC
LIMIT 1;
Заменить column
и my_table
. Увеличьте, 1
если хотите увидеть N
наиболее распространенные значения столбца.
SELECT * FROM my_table GROUP BY value ORDER BY count(*) DESC;
WHERE 'value_occurrence' = 1
?
HAVING
вместо WHERE
в этом случае.
Попробуйте что-нибудь вроде:
SELECT `column`
FROM `your_table`
GROUP BY `column`
ORDER BY COUNT(*) DESC
LIMIT 1;
COUNT(*)
прямо в ORDER BY
. Я знал, что существует несколько ограничений относительно GROUP BY
/ HAVING
и агрегированных столбцов, и всегда предполагал, что это не сработает.
Рассмотрим имя таблицы как tblperson
и имя столбца как city
. Я хочу получить наиболее повторяющийся город из столбца города:
select city,count(*) as nor from tblperson
group by city
having count(*) =(select max(nor) from
(select city,count(*) as nor from tblperson group by city) tblperson)
Вот nor
псевдоним.
Ниже запрос, похоже, хорошо работает для меня в базе данных SQL Server:
select column, COUNT(column) AS MOST_FREQUENT
from TABLE_NAME
GROUP BY column
ORDER BY COUNT(column) DESC
Результат:
column MOST_FREQUENT
item1 highest count
item2 second highest
item3 third higest
..
..
Для использования с SQL Server.
Поскольку в этом нет поддержки команды limit.
Вы можете использовать команду top 1, чтобы найти максимальное значение, встречающееся в конкретном столбце в этом случае (значение)
SELECT top1
`value`,
COUNT(`value`) AS `value_occurrence`
FROM
`my_table`
GROUP BY
`value`
ORDER BY
`value_occurrence` DESC;
Предположим, что таблица - это ' SalesLT.Customer
', а столбец, который вы пытаетесь вычислить, ' CompanyName
' и AggCompanyName
является псевдонимом.
Select CompanyName, Count(CompanyName) as AggCompanyName from SalesLT.Customer
group by CompanyName
Order By Count(CompanyName) Desc;
Если вы не можете использовать LIMIT, или LIMIT не подходит для вашего инструмента запросов. Вместо этого вы можете использовать ROWNUM, но вам понадобится подзапрос:
SELECT FIELD_1, ALIAS1
FROM(SELECT FIELD_1, COUNT(FIELD_1) ALIAS1
FROM TABLENAME
GROUP BY FIELD_1
ORDER BY COUNT(FIELD_1) DESC)
WHERE ROWNUM = 1
ROWNUM
LIMIT 1
вместо этого вы используете ; синтаксис показан в принятом ответе.
Если у вас есть столбец идентификатора, и вы хотите найти наиболее повторяющуюся категорию из другого столбца для каждого идентификатора, вы можете использовать запрос ниже,
Стол:
Запрос:
SELECT ID, CATEGORY, COUNT(*) AS FREQ
FROM TABLE
GROUP BY 1,2
QUALIFY ROW_NUMBER() OVER(PARTITION BY ID ORDER BY FREQ DESC) = 1;
Результат: