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
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
Yanıtlar:
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.
SELECT * FROM my_table GROUP BY value ORDER BY count(*) DESC;
WHERE 'value_occurrence' = 1?
HAVINGyerine kullanmanız gerekir WHERE.
Şöyle bir şey dene:
SELECT `column`
FROM `your_table`
GROUP BY `column`
ORDER BY COUNT(*) DESC
LIMIT 1;
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.
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.
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
..
..
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;
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;
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
LIMIT 1onun yerine kullanırsınız; sözdizimi kabul edilen cevapta gösterilir.
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:

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ç:
