5

我有一张这样的桌子:

id  | module_id | answered 
 1       4           3
 2       4           1
 3       4          NULL
 4       5          NULL 
 5       5           1

我需要计算每个 module_id 的行数以及回答不为 NULL 的行数。

所以我需要结果

module_id  | row_count  |  answered
    4            3            2
    5            2            1

到目前为止我有

SELECT module_id, COUNT(*) as row_count FROM table GROUP BY module_id

但我不知道如何做已回答的专栏。有任何想法吗?

4

2 回答 2

4
 COUNT(answered)

将计算该特定列中的非空值。

这就是 COUNT(*) 比 COUNT(some-column) 快得多的原因。

于 2013-09-09T16:43:38.473 回答
0

如果您使用 COUNT(column) 它只会计算非空值行。

计数函数有三种变体:

  • COUNT(*) 计算所有行
  • COUNT(column) 只计算非空值
  • COUNT(1) 与 COUNT(*) 相同,因为 1 是非空表达式

您对 COUNT(*) 或 COUNT(column) 的使用应仅基于所需的输出。

于 2013-09-09T17:15:02.007 回答