Temukan nilai yang paling sering di kolom SQL

122

Bagaimana saya bisa menemukan nilai yang paling sering di kolom tertentu dalam tabel SQL?

Misalnya, untuk tabel ini harus dikembalikan twokarena ini adalah nilai yang paling sering:

one
two
two
three
Jake
sumber
1
GRUP BERDASARKAN versi: stackoverflow.com/questions/344665/get-most-common-value-in-sql
Ciro Santilli 郝海东 冠状 病 六四 六四 法轮功
1
Bagaimana dengan ikatan? Tambahkan baris 'tiga' lainnya ke data sampel, dan tentukan hasil yang diharapkan.
jarlh

Jawaban:

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

Ganti columndan my_table. Tingkatkan 1jika Anda ingin melihat Nnilai kolom yang paling umum.

Mihai Stancu
sumber
1
apa yang harus saya lakukan jika saya ingin memilih bidang lain juga dari 'tabel_saya'? Dengan kata lain, nilai lain;
grep
7
bagaimana jika lebih dari satu nilai muncul dalam frekuensi yang sama (yang mana max)? Dalam hal ini, apakah tiga juga muncul dua kali? LIMIT 1 hanya akan menampilkan satu rekaman
mustafa1993
1
@ mustafa1993SELECT * FROM my_table GROUP BY value ORDER BY count(*) DESC;
Ahmed Syed
mengapa tidak berhasil saat saya menambahkan WHERE 'value_occurrence' = 1?
swisswiss
1
@swisswiss Anda harus menggunakan, HAVINGbukan WHEREdalam kasus ini.
HellBaby
47

Cobalah sesuatu seperti:

SELECT       `column`
    FROM     `your_table`
    GROUP BY `column`
    ORDER BY COUNT(*) DESC
    LIMIT    1;
Tikar
sumber
6
Saya tidak tahu apakah Anda dapat menggunakan COUNT(*)langsung di ORDER BY. Saya tahu ada beberapa batasan mengenai GROUP BY/ HAVINGdan kolom agregat dan saya selalu berasumsi bahwa itu tidak akan berhasil.
Mihai Stancu
21

Mari kita pertimbangkan nama tabel sebagai tblpersondan 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 noradalah nama aliasnya.

naveen
sumber
1 untuk menggunakan SQL standar yang akan berfungsi di database apa pun (sedangkan LIMIT khusus MySQL, TOP khusus SQL Server).
Dylan Smith
7

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
..
..
Swadhikar C
sumber
3

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;
Muneeb Hassan
sumber
Anda juga perlu memindahkan fungsi COUNT ke bagian ORDER BY untuk menghindari kesalahan berikut: Hanya satu ekspresi yang dapat ditentukan dalam daftar pilih ketika subkueri tidak diperkenalkan dengan EXISTS
Saba Jamalian
1

Asumsi Tabel adalah " SalesLT.Customerdan Kolom yang Anda coba cari tahu adalah ' CompanyName' dan AggCompanyNamemerupakan Alias.

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

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
Roadkill
sumber
MySQL tidak memilikiROWNUM
Barmar
Ini berlaku untuk oracle tapi tidak untuk mysql
Prabhu
1
@Prabhu di MySQL, Anda menggunakan LIMIT 1; sintaks ditampilkan dalam jawaban yang diterima.
ToolmakerSteve
0

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:

Isi tabel

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:

Hasil kueri

Mayur Mane
sumber
-1

Salah satu cara yang saya suka gunakan adalah:

Pilih ,MENGHITUNG() sebagai VAR1 dari Table_Name

dikelompokkan menurut

memesan dengan VAR1 desc

batas 1

Omar Lari
sumber