1
ID カテゴリ アクティブ
------------------------
1 1 1
2 3 0
3 3 1
4 3 1
5 1 0

total count of each categoryと を選択したいcount of active in each cateogry

category=2 がないので IFNULL を使ったが 0 が返ってこない

選択する
    IFNULL(COUNT(id), 0) AS 合計,
    SUM(CASE WHEN active = 1 THEN 1 ELSE 0 END) AS アクティブ
から
    テーブル
どこ
    カテゴリー イン (1,2,3)
グループ化
    カテゴリー

結果は、予想どおり 3 つではなく、2 つの配列を返しました

// カテゴリ = 1 の結果
配列
(
    [合計] => 2
    [アクティブ] => 1
)
// カテゴリ = 3 の結果
配列
(
    [合計] => 3
    [アクティブ] => 2
)

どうすればcategory=2を結果に入れることができますか

// カテゴリ = 2 の結果
配列
(
    [合計] => 0
    [アクティブ] => 0
)
4

5 に答える 5

1

クエリは正しい結果を返していますが、期待した結果ではありません。COUNT はグループ化句であり、既存の値のみをグループ化します。このカテゴリが存在しないため、= to category=2 は返されません。

于 2012-11-15T09:39:13.240 に答える
0

データベースエンジンはid=2の行をどこで取得する必要がありますか?

カテゴリテーブルから選択してから、別のテーブルから数える必要があります。

ニーズクエリは次のようになります(DBにテーブルとデータがないためチェックしませんでした)

SELECT
    c.id,
    COUNT(t.id) AS total,
    SUM(CASE WHEN t.active = 1 THEN 1 ELSE 0 END) AS active
FROM
    categories_table AS c
LEFT JOIN table AS t ON c.id=t.category
WHERE
    c.id IN (1,2,3)
GROUP BY
    t.category
于 2012-11-15T09:49:29.567 に答える
0

存在しないグループをどのように期待できますか;-)ただし、必要なものを取得するためにここに参加したいカテゴリPARENTテーブルがあります。

それ以外の場合は、追加の句を使用して、使用できないカテゴリの配列を検証し、コード行を手動で挿入して、最終出力に表示することができます。

したがって、すべてのカテゴリが利用可能である場合、それ以外の場合は、検証が機能します。

于 2012-11-15T09:50:07.160 に答える
0

テーブルに存在しないカテゴリを含む行を生成することは事実上不可能です。

すべてのカテゴリを含む別のテーブルを用意してから、次のLEFT JOINように使用する必要があります。

SELECT categories.category, 
    COUNT(*) AS total,
    SUM(`table`.active)
FROM categories
LEFT JOIN `table` USING (category)
WHERE categories.category IN (1,2,3)
GROUP BY categories.category;
于 2012-11-15T09:44:32.833 に答える
0

Count(*) が null を返すことはありません

これを試して:

SELECT
    COUNT(id) AS total,
    SUM(CASE WHEN active = 1 THEN 1 ELSE 0 END) AS active
FROM
    table
WHERE
    category IN (1,2,3)
GROUP BY
    category
于 2012-11-15T09:37:57.573 に答える