我有下表:
+-------+------------------+-----------------------+-------------------+------+
| id | A_id | B_id | C_id | age |
+-------+------------------+-----------------------+-------------------+------+
| 44 | 22 | 22 | 22 | 35 |
| 47 | 6 | NULL | 6 | 33 |
| 48 | 4 | NULL | 4 | 32 |
| 52 | 23 | NULL | 23 | 37 |
| 54 | 9 | 9 | NULL | 37 |
| 55 | NULL | 8 | NULL | 29 |
| 60 | 8 | NULL | 8 | 37 |
| 62 | 8 | NULL | 8 | 35 |
| 65 | 11 | NULL | 11 | 46 |
| 69 | 9 | NULL | 9 | 52 |
+-------+------------------+-----------------------+-------------------+------+
我想计算具有特定值的总行数,即:
_id - count(id)
22 - 1
6 - 1
4 - 1
23 - 1
9 - 2
8 - 3
11 - 1
我如何为此编写查询?
答案 0 :(得分:2)
我假设每行中至少有一个值不是NULL(可以进一步调整以处理它,但我认为你不会有这样的记录)。
它不是很漂亮,但应该有效:
SELECT
GREATEST(IFNULL(A_id, 0), IFNULL(B_id, 0), IFNULL(C_id, 0)),
COUNT(*)
FROM table
GROUP BY GREATEST(IFNULL(A_id, 0), IFNULL(B_id, 0), IFNULL(C_id, 0))
同样更紧凑的方式:
SELECT
IFNULL(A_id, IFNULL(B_id, C_id)),
COUNT(*)
FROM table
GROUP BY IFNULL(A_id, IFNULL(B_id, C_id))