GROUP BY 在一定条件下
GROUP BY on certain condition
我在查询的 GROUP BY
部分遇到了一些 MySQL 困难。
我想在 GROUP BY
中使用一列,但它应该只用于取决于行中某个值的特定条件。假设我有这个 table:
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
的组合中遗漏了一些东西,我希望你们中的任何人能帮助我。
您可以使用一个简单的 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 中查看结果。
根据您所需的输出,您可能需要在这些行上做一些事情
SELECT c, count(*) FROM test_table where b=1 GROUP BY c
UNION
SELECT c, count(*) FROM test_table where b<>1
我在查询的 GROUP BY
部分遇到了一些 MySQL 困难。
我想在 GROUP BY
中使用一列,但它应该只用于取决于行中某个值的特定条件。假设我有这个 table:
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
的组合中遗漏了一些东西,我希望你们中的任何人能帮助我。
您可以使用一个简单的 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 中查看结果。
根据您所需的输出,您可能需要在这些行上做一些事情
SELECT c, count(*) FROM test_table where b=1 GROUP BY c
UNION
SELECT c, count(*) FROM test_table where b<>1