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.