SQL:列内の各個別値の数を取得する方法は?


175

次のような「posts」というSQLテーブルがあります。

id | category
-----------------------
1  | 3
2  | 1
3  | 4
4  | 2
5  | 1
6  | 1
7  | 2

各カテゴリー番号はカテゴリーに対応しています。すべての1つのSQLクエリで各カテゴリが投稿に表示される回数を数えるにはどうすればよいですか?

例として、このようなクエリは、次のようなシンボリック配列を返す場合があります。 (1:3, 2:2, 3:1, 4:1)


私の現在の方法は、次のような可能なカテゴリごとにクエリを使用しSELECT COUNT(*) AS num FROM posts WHERE category=#、戻り値を組み合わせて最終的な配列にすることです。ただし、クエリを1つだけ使用するソリューションを探しています。


回答:


310
SELECT
  category,
  COUNT(*) AS `num`
FROM
  posts
GROUP BY
  category

3
ありがとう!思ったよりずっとシンプルでした!
ジェフゴートメーカー、2011

4
@MichelAyres:ソース?
Moberg、2014

5
「つまり、ANSI標準は、それがあなたの意味するところの明確な出血として認識します。COUNT(1)は、この迷信のためにRDBMSベンダーによって最適化されています。それ以外の場合は、ANSIに従って評価されます」Count(*)vs Count(1)
Michel Ayres、2014

@Mobergそれは私が学んだ方法でした(老人は迷信を教えています...)。これについてのチャットの一部を次に示します
Michel Ayres

1
例にある列名とテーブル名を使用すると、「そこに」機能します。
Dan Grossman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.