Знайдіть найчастіше значення в стовпці SQL


122

Як я можу знайти найчастіше значення в заданому стовпці таблиці SQL?

Наприклад, для цієї таблиці вона повинна повертатися, twoоскільки вона є найчастішим значенням:

one
two
two
three


1
А як щодо зв’язків? Додайте ще один "три" рядок до зразкових даних та вкажіть очікуваний результат.
jarlh

Відповіді:


180
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найпоширеніші значення стовпця.


1
що мені робити, якщо я теж хочу вибрати інші поля з "my_table"? Іншими словами, інше значення;
греп

7
що робити, якщо більше одного значення відображається однаково не раз (що є максимальним)? У такому випадку, якщо три теж з’являлися двічі? LIMIT 1 покаже лише один запис
mustafa1993

1
@ mustafa1993SELECT * FROM my_table GROUP BY value ORDER BY count(*) DESC;
Ahmed Syed

чому це не працює, коли я додаю WHERE 'value_occurrence' = 1?
swisswiss

1
@swisswiss ви повинні використовувати HAVINGзамість WHEREцього випадку.
HellBaby

47

Спробуйте щось на кшталт:

SELECT       `column`
    FROM     `your_table`
    GROUP BY `column`
    ORDER BY COUNT(*) DESC
    LIMIT    1;

6
Я не знав, що ви можете використовувати COUNT(*)прямо в ORDER BY. Я знав, що існує кілька обмежень щодо GROUP BY/ HAVINGта сукупності стовпців, і я завжди вважав, що це не спрацює.
Михай Станку

21

Розглянемо назву таблиці як 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псевдонім.


+1 для використання стандартного SQL, який буде працювати в будь-якій базі даних (тоді як LIMIT - специфічний для MySQL, TOP - специфічний для SQL Server).
Ділан Сміт

7

Здається, що запит працює для мене в базі даних 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
..
..

3

Для використання з SQL Server.

Оскільки в цьому немає обмеженої підтримки команд.

Yo може скористатися командою top 1, щоб знайти максимальне значення в цьому стовпчику в конкретному стовпці (value)

SELECT top1 
    `value`,
    COUNT(`value`) AS `value_occurrence` 
FROM     
    `my_table`
GROUP BY 
    `value`
ORDER BY 
    `value_occurrence` DESC;

Вам також потрібно перенести функцію COUNT у розділ ЗАМОВИТИ, щоб уникнути наступної помилки: У списку вибору можна вказати лише одне вираження, коли підзапит не введено з EXISTS
Saba Jamalian

1

Припустимо, що таблиця " SalesLT.Customer", а стовпець, яку ви намагаєтеся з'ясувати, є " CompanyName" і AggCompanyNameє псевдонімом.

Select CompanyName, Count(CompanyName) as AggCompanyName from SalesLT.Customer
group by CompanyName
Order By Count(CompanyName) Desc;

0

Якщо ви не можете використовувати 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

MySQL не маєROWNUM
Barmar

Це справедливо для Oracle, але не mysql
Prabhu

1
@Prabhu в MySQL, ви використовуєте LIMIT 1натомість; синтаксис відображається у прийнятій відповіді.
ToolmakerSteve

0

Якщо у вас стовпчик ідентифікаторів і ви хочете знайти найбільш повторювані категорії з іншого стовпця для кожного ідентифікатора, то ви можете використовувати нижче запит,

Таблиця:

Зміст таблиці

Запит:

SELECT ID, CATEGORY, COUNT(*) AS FREQ
FROM TABLE
GROUP BY 1,2
QUALIFY ROW_NUMBER() OVER(PARTITION BY ID ORDER BY FREQ DESC) = 1;

Результат:

Результат запиту


-1

Мені подобається користуватися одним із способів:

виберіть ,РАХУВАТИ() як VAR1 від Table_Name

групувати по

замовлення по VAR1 опр

межа 1

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.