0

少し最適化したいMySQLクエリがあります。ここにあります:

SELECT `items`.category AS 'Category', 'Without' AS 'Which', COUNT(*) AS 'Count'
FROM `items` 
WHERE `id`=706 
GROUP BY `category`

UNION

SELECT `items`.category AS 'Category', 'With' AS 'Which', COUNT(*) AS 'Count'  
FROM `items` 
WHERE `id`=706 AND `qa_items`.pointsoff=0 
GROUP BY `category`;

私が得るものはこれです:

+---------------------------+---------+-------+
| Category                  | Which   | Count |
+---------------------------+---------+-------+
| Category A                | Without |     3 |
| Category B                | Without |     8 |
| Category C                | Without |     4 |
| Category A                | With    |     2 |
| Category B                | With    |     6 |
| Category C                | With    |     4 |
+---------------------------+---------+-------+

しかし、私が欲しいのはこれです:

+---------------------------+---------+-------+
| Category                  | Without | With  |
+---------------------------+---------+-------+
| Category A                |       3 |     2 |
| Category B                |       8 |     6 |
| Category C                |       4 |     4 |
+---------------------------+---------+-------+

おそらく何らかのサブクエリを実行する必要があることはわかっていますが、サブクエリで探しているカテゴリをどのように参照するかはわかりません。ここに私が欠けている単純な何かがあると確信しています。誰か助けてもらえますか?ありがとう!

4

2 に答える 2

1

ここでは、単純に UNION を削除して代わりに使用できます。

SELECT
    category as Category,
    COUNT(*) as Without,
    SUM(pointsoff = 0) as With
FROM items
WHERE id=706
GROUP BY category;

SUM(ブール条件)パターンに注意してください。これは、パフォーマンスに優れた使用方法があるため、覚えておく価値のある非常に便利なトリックです。任意のブール条件を使用でき、条件を満たすグループ内の行数が得られることに注意してください。

于 2012-06-20T20:39:39.170 に答える
0

あなたのクエリの代わりに...あなたは次のようなことをしたいと思うでしょう

SUM(IF(items.Without, 1,0)) as Without, SUM(IF(items.With, 1,0)) as With for the columns 
于 2012-06-20T19:51:51.217 に答える