SQL 열에서 가장 빈번한 값 찾기


122

SQL 테이블의 주어진 열에서 가장 빈번한 값을 어떻게 찾을 수 있습니까?

예를 들어,이 테이블의 경우 two가장 빈번한 값이므로 반환해야 합니다.

one
two
two
three


1
관계는 어떻습니까? 샘플 데이터에 또 다른 '3'행을 추가하고 예상 결과를 지정합니다.
jarlh

답변:


180
SELECT       `column`,
             COUNT(`column`) AS `value_occurrence` 
    FROM     `my_table`
    GROUP BY `column`
    ORDER BY `value_occurrence` DESC
    LIMIT    1;

교체 columnmy_table. 열의 가장 일반적인 값 1을 보려면 늘리십시오 N.


1
'my_table'에서 다른 필드도 선택하려면 어떻게해야합니까? 즉, 또 다른 가치;
grep

7
둘 이상의 값이 똑같이 나타나지 않으면 (최대 값)? 이 경우 세 개도 두 번 나타나면? LIMIT 1은 하나의 레코드 만 표시합니다
mustafa1993

1
@ mustafa1993SELECT * FROM my_table GROUP BY value ORDER BY count(*) DESC;
아메드시 에드

추가 할 때 왜 작동하지 WHERE 'value_occurrence' = 1않습니까?
swisswiss

1
이 경우 HAVING대신 @swisswiss를 사용해야합니다 WHERE.
HellBaby

47

다음과 같이 시도하십시오.

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

6
COUNT(*)에서 직접 사용할 수 있는지 몰랐 습니다 ORDER BY. GROUP BY/ HAVING및 집계 열과 관련하여 몇 가지 제한이 있음을 알고 항상 작동하지 않을 것이라고 생각했습니다.
Mihai Stancu 2012 년

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은 별칭 이름입니다.


모든 데이터베이스에서 작동하는 표준 SQL을 사용하는 경우 +1 (LIMIT는 MySQL에 따라 다르며 TOP은 SQL Server에 따라 다릅니다).
Dylan Smith

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와 함께 사용합니다.

제한 명령 지원이 없기 때문에.

이 경우 상위 1 명령을 사용하여 특정 열에서 발생하는 최대 값을 찾을 수 있습니다 (값).

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

당신은 또한 다음과 같은 오류가 발생하지 않도록 섹션에 의해 ORDER에 COUNT 함수를 이동해야 : 서브 쿼리가 도입되지 않은 경우 하나 개의 표현이 선택 목록에 지정할 수 있습니다 EXISTS
사바 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 2015

이것은 오라클에는 유효하지만 mysql에는 유효하지 않습니다
Prabhu

1
MySQL에서는 @Prabhu를 LIMIT 1대신 사용 합니다. 구문은 허용되는 답변에 표시됩니다.
ToolmakerSteve

0

ID 열이 있고 각 ID에 대해 다른 열에서 가장 반복적 인 범주를 찾으려면 아래 쿼리를 사용할 수 있습니다.

표:

표 내용

질문:

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

내가 사용하는 한 가지 방법은 다음과 같습니다.

고르다 ,카운트() Table_Name의 VAR1

그룹화

VAR1 desc로 주문

제한 1

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.