Bagaimana saya bisa menemukan nilai yang paling sering di kolom tertentu dalam tabel SQL?
Misalnya, untuk tabel ini harus dikembalikan two
karena ini adalah nilai yang paling sering:
one
two
two
three
Bagaimana saya bisa menemukan nilai yang paling sering di kolom tertentu dalam tabel SQL?
Misalnya, untuk tabel ini harus dikembalikan two
karena ini adalah nilai yang paling sering:
one
two
two
three
Jawaban:
SELECT `column`,
COUNT(`column`) AS `value_occurrence`
FROM `my_table`
GROUP BY `column`
ORDER BY `value_occurrence` DESC
LIMIT 1;
Ganti column
dan my_table
. Tingkatkan 1
jika Anda ingin melihat N
nilai kolom yang paling umum.
SELECT * FROM my_table GROUP BY value ORDER BY count(*) DESC;
WHERE 'value_occurrence' = 1
?
HAVING
bukan WHERE
dalam kasus ini.
Cobalah sesuatu seperti:
SELECT `column`
FROM `your_table`
GROUP BY `column`
ORDER BY COUNT(*) DESC
LIMIT 1;
COUNT(*)
langsung di ORDER BY
. Saya tahu ada beberapa batasan mengenai GROUP BY
/ HAVING
dan kolom agregat dan saya selalu berasumsi bahwa itu tidak akan berhasil.
Mari kita pertimbangkan nama tabel sebagai tblperson
dan nama kolom sebagai city
. Saya ingin mengambil kota yang paling sering diulang dari kolom kota:
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)
Ini nor
adalah nama aliasnya.
Kueri di bawah ini tampaknya berfungsi dengan baik untuk saya dalam database SQL Server:
select column, COUNT(column) AS MOST_FREQUENT
from TABLE_NAME
GROUP BY column
ORDER BY COUNT(column) DESC
Hasil:
column MOST_FREQUENT
item1 highest count
item2 second highest
item3 third higest
..
..
Untuk digunakan dengan SQL Server.
Karena tidak ada batasan dukungan perintah di dalamnya.
Anda dapat menggunakan perintah 1 teratas untuk menemukan nilai maksimum yang terjadi di kolom tertentu dalam kasus ini (nilai)
SELECT top1
`value`,
COUNT(`value`) AS `value_occurrence`
FROM
`my_table`
GROUP BY
`value`
ORDER BY
`value_occurrence` DESC;
Asumsi Tabel adalah " SalesLT.Customer
dan Kolom yang Anda coba cari tahu adalah ' CompanyName
' dan AggCompanyName
merupakan Alias.
Select CompanyName, Count(CompanyName) as AggCompanyName from SalesLT.Customer
group by CompanyName
Order By Count(CompanyName) Desc;
Jika Anda tidak dapat menggunakan LIMIT atau LIMIT bukanlah pilihan untuk alat kueri Anda. Anda dapat menggunakan "ROWNUM" sebagai gantinya, tetapi Anda akan membutuhkan sub kueri:
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 1
; sintaks ditampilkan dalam jawaban yang diterima.
Jika Anda memiliki kolom ID dan Anda ingin menemukan kategori yang paling berulang dari kolom lain untuk setiap ID maka Anda dapat menggunakan kueri di bawah ini,
Meja:
Pertanyaan:
SELECT ID, CATEGORY, COUNT(*) AS FREQ
FROM TABLE
GROUP BY 1,2
QUALIFY ROW_NUMBER() OVER(PARTITION BY ID ORDER BY FREQ DESC) = 1;
Hasil: