SQL sütununda en sık kullanılan değeri bulun


122

Bir SQL tablosundaki belirli bir sütundaki en sık değeri nasıl bulabilirim?

Örneğin, bu tablo twoiçin en sık kullanılan değer olduğu için dönmelidir :

one
two
two
three


1
Ya bağlar? Örnek verilere başka bir 'üç' satır ekleyin ve beklenen sonucu belirtin.
jarlh

Yanıtlar:


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

Değiştir columnve my_table. Sütunun en yaygın değerlerini 1görmek istiyorsanız artırın N.


1
'my_table'dan başka alanlar da seçmek istersem ne yapmalıyım? Diğer bir deyişle, başka bir değer;
grep

7
ya birden fazla değer hiç aynı görünmüyorsa (hangisi maksimumdur)? Bu durumda, üç de iki kez göründüyse? SINIR 1 sadece bir kayıt gösterecek
mustafa1993

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

eklediğimde neden çalışmıyor WHERE 'value_occurrence' = 1?
swisswiss

1
Bu durumda @swisswiss HAVINGyerine kullanmanız gerekir WHERE.
HellBaby

47

Şöyle bir şey dene:

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

6
COUNT(*)Doğrudan içinde kullanabileceğinizi bilmiyordum ORDER BY. GROUP BY/ HAVINGVe toplu sütunlarla ilgili birkaç kısıtlama olduğunu biliyordum ve her zaman bunun işe yaramayacağını varsaydım.
Mihai Stancu

21

Tablo adını, tblpersonsütun adını olarak düşünelim city. Şehir sütunundan en çok tekrarlanan şehri almak istiyorum:

 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)

İşte norbir takma ad.


Herhangi bir veritabanında çalışacak standart SQL kullanmak için +1 (LİMİT MySQL'e özel, TOP ise SQL Server'a özeldir).
Dylan Smith

7

Aşağıdaki sorgu SQL Server veritabanında benim için iyi çalışıyor gibi görünüyor:

select column, COUNT(column) AS MOST_FREQUENT
from TABLE_NAME
GROUP BY column
ORDER BY COUNT(column) DESC

Sonuç:

column          MOST_FREQUENT
item1           highest count
item2           second highest 
item3           third higest
..
..

3

SQL Server ile kullanmak için.

Çünkü bunda limit komut desteği yok.

Bu durumda, belirli bir sütunda oluşan maksimum değeri bulmak için ilk 1 komutunu kullanabilirsiniz (değer)

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

Ayrıca aşağıdaki hatayı almamak için COUNT işlevini ORDER BY bölümüne taşımanız gerekir: EXISTS
Saba Jamalian

1

Tablonun ' SalesLT.Customer' olduğunu ve anlamaya çalıştığınız Sütunun ' CompanyName' olduğunu ve AggCompanyNamebir Takma Ad olduğunu varsayarsak .

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

0

LIMIT kullanamıyorsanız veya LIMIT sorgu aracınız için bir seçenek değildir. Bunun yerine "ROWNUM" kullanabilirsiniz, ancak bir alt sorguya ihtiyacınız olacak:

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
MySQL'de

Bu MySQL Oracle için geçerli ama değil
Prabhu

1
MySQL'de @Prabhu, LIMIT 1onun yerine kullanırsınız; sözdizimi kabul edilen cevapta gösterilir.
ToolmakerSteve

0

Bir kimlik sütununuz varsa ve her kimlik için başka bir sütundan en çok tekrarlanan kategoriyi bulmak istiyorsanız, aşağıdaki sorguyu kullanabilirsiniz:

Tablo:

Tablo içeriği

Sorgu:

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

Sonuç:

Sorgu sonucu


-1

Kullanmayı sevdiğim bir yol:

seçmek ,MİKTAR() Table_Name'den VAR1 olarak

göre grupla

VAR1 azalan sipariş

limit 1

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.