SQL untuk menemukan jumlah nilai yang berbeda dalam kolom

340

Saya dapat memilih semua nilai yang berbeda dalam kolom dengan cara berikut:

  • SELECT DISTINCT column_name FROM table_name;
  • SELECT column_name FROM table_name GROUP BY column_name;

Tetapi bagaimana saya mendapatkan jumlah baris dari kueri itu? Apakah diperlukan subquery?

Christian Oudard
sumber
1
Versi SQL Server apa yang Anda gunakan?
Kevin Fairchild

Jawaban:

613

Anda dapat menggunakan DISTINCTkata kunci dalam COUNTfungsi agregat:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name

Ini hanya akan menghitung nilai berbeda untuk kolom itu.

Noah Goodrich
sumber
7
Rapi, saya tidak tahu Anda bisa meletakkan kata kunci yang berbeda di sana.
Christian Oudard
13
juga bekerja dalam kelompokselect A,COUNT(DISTINCT B) from table group by A
tmanthey
6
dapatkah Anda memperluas contoh ini menjadi berbeda di beberapa kolom?
eugene
11 tahun kemudian, dan ini masih berguna
wundermahn
175

Ini akan memberi Anda KEDUA nilai kolom yang berbeda dan jumlah setiap nilai. Saya biasanya menemukan bahwa saya ingin mengetahui kedua informasi tersebut.

SELECT [columnName], count([columnName]) AS CountOf
FROM [tableName]
GROUP BY [columnName]
Paul James
sumber
60
Karena Anda dikelompokkan berdasarkan columnName, Anda sudah mendapatkan nilai berbeda hanya sekali dan distinctkata kunci tidak melakukan apa pun di sini. Coba kueri tanpa itu, resultset persis sama.
Antti29
26

Ketahuilah bahwa Count () mengabaikan nilai null, jadi jika Anda perlu membiarkan null sebagai nilai yang berbeda, Anda dapat melakukan sesuatu yang rumit seperti:

select count(distinct my_col)
       + count(distinct Case when my_col is null then 1 else null end)
from my_table
/
David Aldridge
sumber
Saya benar-benar berpikir pernyataan kasus Anda dimaksudkan untuk mengatakan:case when my_col is null then 1 else my_col end
James Jensen
Untuk kejelasan:SELECT my_col, COUNT(my_col) + COUNT(CASE WHEN my_col IS NULL THEN 1 ELSE NULL END) as CountOf from my_Table GROUP BY my_col
Michael Paulukonis
count (*) termasuk nulls
PragmaticProgrammer
1
@PragmaticProgrammer Saya kira begitu, tetapi tidak ada yang namanya baris nol, hanya nilai nol, dan count(*)secara khusus merupakan hitungan baris.
David Aldridge
20

Jumlah sql dari nilai unik nama_kolom dan diurutkan berdasarkan frekuensi:

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name ORDER BY 2 DESC;
xchiltonx
sumber
1
Pasti jawaban terbaik IMO
Briford Wylie
13
select count(*) from 
(
SELECT distinct column1,column2,column3,column4 FROM abcd
) T

Ini akan memberikan jumlah kelompok kolom yang berbeda.

gipinani
sumber
11
SELECT COUNT(DISTINCT column_name) FROM table as column_name_count;

Anda harus menghitung col yang berbeda itu, lalu berikan alias.

Pete Karl II
sumber
5
select Count(distinct columnName) as columnNameCount from tableName 
Wayne
sumber
0

**

Menggunakan SQL berikut ini kita bisa mendapatkan jumlah nilai kolom yang berbeda di Oracle 11g.

**

Select count(distinct(Column_Name)) from TableName
Nilesh Shinde
sumber
0
select count(distinct(column_name)) AS columndatacount from table_name where somecondition=true

Anda dapat menggunakan kueri ini, untuk menghitung data yang berbeda / berbeda. Terima kasih

Nitika Chopra
sumber
0

Setelah MS SQL Server 2012, Anda dapat menggunakan fungsi jendela juga.

   SELECT column_name, 
   COUNT(column_name) OVER (Partition by column_name) 
   FROM table_name group by column_name ; 
Alper
sumber
-8

Hitung (berbeda ({fieldname})) berlebihan

Cukup Hitung ({fieldname}) memberi Anda semua nilai yang berbeda dalam tabel itu. Itu tidak akan (sebanyak anggapan) hanya memberi Anda Hitungan tabel [yaitu BUKAN sama dengan Hitungan (*) dari tabel]

Paul Pena
sumber
2
Tidak, ini tidak benar. count(field)mengembalikan jumlah baris mana fieldadalah not null.
Antti29