2

存在しないものでグループ化することは可能ですか (これが適切な用語でない場合は申し訳ありません)。

たとえば、次のようなテーブルがあるとします。

post_id - ステータス

1 - アクティブ

2 - 一時停止

3 - ホールド

ステータス テーブルの可能な値は、アクティブ、一時停止、保留、削除済みです。

しかし、ステータス列には、いつでもこれらのステータスタイプのすべてがある場合とない場合がありますが、ステータスがそこにない場合でも、ステータスが0カウントで返されるようにしたいと考えています。

(疑似クエリ)のようなことをすることは可能ですか:

SELECT COUNT(post_id), status(active,suspended,hold,deleted) FROM users GROUP BY status

Ps この方法でテーブルを作成しないように誰かが提案する前に、これがこの CMS のプロパティ テーブルの構造であるため、私には選択肢がありません。

4

2 に答える 2

4

caseステートメントを試してください

SELECT SUM(CASE WHEN status = "active" THEN 1 ELSE 0 END) active_count,
       SUM(CASE WHEN status = "suspended" THEN 1 ELSE 0 END) suspended_count,
       SUM(CASE WHEN status = "hold" THEN 1 ELSE 0 END) hold_count,
       SUM(CASE WHEN status = "deleted" THEN 1 ELSE 0 END) deleted_count
FROM posts;

この

SELECT "active", SUM(CASE WHEN status = "active" THEN 1 ELSE 0 END) active_count
FROM posts
UNION
SELECT "suspended", SUM(CASE WHEN status = "suspended" THEN 1 ELSE 0 END) suspended_count
FROM posts
UNION
SELECT "hold", SUM(CASE WHEN status = "hold" THEN 1 ELSE 0 END) hold_count
FROM posts
UNION
SELECT "deleted", SUM(CASE WHEN status = "deleted" THEN 1 ELSE 0 END) deleted_count
FROM posts

さらに良い

SELECT "active", COUNT(*) active_count
FROM posts WHERE status = "active"
UNION
SELECT "suspended", COUNT(*) suspended_count
FROM posts WHERE status = "suspended"
UNION
SELECT "hold", COUNT(*) hold_count
FROM posts WHERE status = "hold"
UNION
SELECT "deleted", COUNT(*) deleted_count
FROM posts WHERE status = "deleted"

ここでSQLフィドルを参照してください

于 2013-09-05T02:33:44.070 に答える