SQL เพื่อค้นหาจำนวนค่าที่แตกต่างในคอลัมน์


342

ฉันสามารถเลือกค่าที่แตกต่างทั้งหมดในคอลัมน์ด้วยวิธีต่อไปนี้:

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

แต่ฉันจะได้รับการนับแถวจากแบบสอบถามนั้นได้อย่างไร จำเป็นต้องใช้แบบสอบถามย่อยหรือไม่


1
คุณใช้ SQL Server เวอร์ชันใดอยู่
Kevin Fairchild

คำตอบ:


614

คุณสามารถใช้DISTINCTคำหลักในCOUNTฟังก์ชั่นรวม:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name

สิ่งนี้จะนับเฉพาะค่าที่แตกต่างสำหรับคอลัมน์นั้น


7
ไม่เป็นไรฉันไม่รู้ว่าคุณสามารถใส่คำหลักที่แตกต่างกันได้
Christian Oudard

13
ยังทำงานกับกลุ่มselect A,COUNT(DISTINCT B) from table group by A
tmanthey

6
คุณสามารถขยายตัวอย่างนี้ให้แตกต่างกันในหลายคอลัมน์ได้หรือไม่
eugene

11 ปีต่อมาและสิ่งนี้ยังคงมีประโยชน์
wundermahn

176

สิ่งนี้จะให้ทั้งค่าคอลัมน์ที่แตกต่างและจำนวนของแต่ละค่า ฉันมักจะพบว่าฉันต้องการทราบข้อมูลทั้งสองชิ้น

SELECT [columnName], count([columnName]) AS CountOf
FROM [tableName]
GROUP BY [columnName]

60
เมื่อคุณจัดกลุ่มตามcolumnNameคุณจะได้รับค่าที่แตกต่างเพียงครั้งเดียวและdistinctคำหลักไม่ได้ทำอะไรที่นี่ ลองสืบค้นโดยไม่ใช้ชุดผลลัพธ์เหมือนกันทุกประการ
Antti29

26

โปรดทราบว่า Count () จะละเว้นค่า Null ดังนั้นหากคุณต้องการอนุญาตให้ Null เป็นค่าที่แตกต่างกันคุณสามารถทำสิ่งที่ยุ่งยากเช่น:

select count(distinct my_col)
       + count(distinct Case when my_col is null then 1 else null end)
from my_table
/

ฉันคิดว่าคำแถลงกรณีของคุณหมายถึงการพูดว่า:case when my_col is null then 1 else my_col end
James Jensen

เพื่อความชัดเจน: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 (*) รวม nulls
PragmaticProgrammer

1
@ProfmaticProgrammer ฉันเดาเช่นนั้น แต่ไม่มีสิ่งใดที่เป็นแถวว่างเพียงค่าว่างและcount(*)เป็นจำนวนแถวที่เฉพาะเจาะจง
David Aldridge

20

ผลรวม sql ของค่าไม่ซ้ำกันของ column_name และเรียงลำดับตามความถี่:

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name ORDER BY 2 DESC;

1
คำตอบที่ดีที่สุดแน่นอน IMO
Briford Wylie

13
select count(*) from 
(
SELECT distinct column1,column2,column3,column4 FROM abcd
) T

สิ่งนี้จะให้จำนวนกลุ่มคอลัมน์ที่แตกต่างกัน


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

คุณต้องนับสีที่แตกต่างจากนั้นให้นามแฝง



0

**

การใช้ SQL ต่อไปนี้เราสามารถรับจำนวนคอลัมน์ที่แตกต่างใน Oracle 11g

**

Select count(distinct(Column_Name)) from TableName

0
select count(distinct(column_name)) AS columndatacount from table_name where somecondition=true

คุณสามารถใช้แบบสอบถามนี้เพื่อนับข้อมูลที่แตกต่าง / แตกต่างกัน ขอบคุณ


0

หลังจาก MS SQL Server 2012 คุณสามารถใช้ฟังก์ชันหน้าต่างได้เช่นกัน

   SELECT column_name, 
   COUNT(column_name) OVER (Partition by column_name) 
   FROM table_name group by column_name ; 

-8

จำนวน (แตกต่าง ({fieldname})) ซ้ำซ้อน

เพียงนับ ({fieldname}) ให้ค่าที่ต่างกันทั้งหมดในตารางนั้น มันจะไม่ (สมมติให้มากที่สุด) เพียงแค่ให้คุณนับตาราง [คือไม่เหมือนกับ Count (*) จากตาราง]


2
ไม่ไม่ถูกต้อง count(field)ส่งกลับจำนวนของเส้นที่เป็นfield not null
Antti29
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.