列内の個別の値の数を見つけるSQL


340

次の方法で、列内のすべての個別の値を選択できます。

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

しかし、そのクエリから行数を取得するにはどうすればよいですか?サブクエリは必要ですか?


1
SQL Serverのどのバージョンを使用していますか?
ケビンフェアチャイルド

回答:


613

集計関数DISTINCT内でキーワードを使用できますCOUNT

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name

これにより、その列の個別の値のみがカウントされます。


7
きちんと、私はあなたがそこに明確なキーワードを置くことができることを知りませんでした。
クリスチャンオダード2008

13
グループにも対応select A,COUNT(DISTINCT B) from table group by A
2013

6
この例を拡張して、複数の列で区別できますか?
ユージーン2015年

11年後、これはまだ有用です
wundermahn

175

これにより、個別の列の値と各値の数の両方が得られます。通常、両方の情報を知りたいと思います。

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

60
でグループ化しているのでcolumnName、すでに個別の値を1回だけ取得しており、distinctキーワードはここでは何もしません。それなしでクエリを試してください。結果セットはまったく同じです。
Antti29、2014年

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 2015年

count(*)にはnullが含まれます
PragmaticProgrammer

1
@PragmaticProgrammer私はそう思うが、null行のようなものはなく、null値のみ、そして count(*)具体的には行数です。
デビッドアルドリッジ

20

column_nameの一意の値のSQL合計であり、頻度でソートされています。

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

1
間違いなく最高の答えIMO
ブリフォードワイリー

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;

その個別のcolを数えて、エイリアスを付ける必要があります。



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

Count(distinct({fieldname}))は冗長です

単にCount({fieldname})は、そのテーブルのすべての個別の値を提供します。それは(多くの仮定と同じように)テーブルのカウントを与えるだけではありません[つまり、テーブルのカウント(*)と同じではありません]


2
いいえ、これはありません正しいです。count(field)行数返しfieldですnot null
Antti29、2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.