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?


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.


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]

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
/

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;

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.


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

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


5
select Count(distinct columnName) as columnNameCount from tableName 

0

**

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

**

Select count(distinct(Column_Name)) from TableName

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


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 ; 

-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]


2
Tidak, ini tidak benar. count(field)mengembalikan jumlah baris mana fieldadalah not null.
Antti29
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.