我在查询的GROUP BY
部分遇到了一些MySQL问题。
我想在GROUP BY
中使用一列,但这只应用于某个依赖于行中值的特定条件。我们说我有这张桌子:
mysql> SELECT * FROM test_table;
+---+---+---+
| a | b | c |
+---+---+---+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 2 |
| 4 | 2 | 2 |
| 5 | 2 | 3 |
| 6 | 3 | 1 |
| 7 | 2 | 2 |
+---+---+---+
7 rows in set (0.00 sec)
现在我想检索所有行,它们只应在列c上使用GROUP BY
,当b === 1.这意味着我想要返回6行,因为行数为2和3应该分组。所以我提出了以下查询,它没有给我预期的结果。
mysql> SELECT * FROM test_table GROUP BY CASE WHEN b = 1 THEN c END;
+---+---+---+
| a | b | c |
+---+---+---+
| 4 | 2 | 2 |
| 1 | 1 | 1 |
| 2 | 1 | 2 |
+---+---+---+
3 rows in set (0.00 sec)
我可能在CASE
语句和GROUP BY
的组合中遗漏了一些内容,我希望你们中的任何人都可以帮助我。
答案 0 :(得分:0)
您可以使用简单的GROUP BY
子句,其中b
和c
列以逗号分隔:
SELECT *
FROM test_table
GROUP BY CASE WHEN b=1 THEN c ELSE a END;
<强>结果:强>
A B C
1 1 1
2 1 2
4 2 2
5 2 3
6 3 1
7 2 2
请参阅SQL Fiddle中的结果。
答案 1 :(得分:0)
根据您所需的输出,您可能需要在这些行上执行某些操作
SELECT c, count(*) FROM test_table where b=1 GROUP BY c
UNION
SELECT c, count(*) FROM test_table where b<>1