2

我有下表:

+-------+------------------+-----------------------+-------------------+------+
|    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

我将如何为此编写查询?

4

1 回答 1

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))
于 2013-11-14T09:20:39.057 回答