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.