一个字段上的 WHERE 子句

WHERE clause on one field

我正在尝试创建一个查询,其中 WHERE 子句只影响一个字段而不影响其他字段。

样本Table:

+--------+---------+-------------+-------------+
| ID     | Name    | COUNTRY     | LANG        |
+--------+---------+-------------+-------------+
| 1      | Sami    | UK          | English     |
| 2      | James   | Spain       | NULL        |
| 3      | John    | USA         | English     |
| 4      | Alex    | Greece      | NULL        |
| 5      | Jane    | Italy       | Italian     |
+--------+---------+-------------+-------------+

我想创建一个查询,其中所有
1) 所有 ID 的计数
2) LANG IS NOT NULL

中所有 ID 的计数

期望的结果:

ID_Count

    +----------+----------------+
    | ID_COUNT | NOT_NULL_LANG  | 
    +----------+----------------+
    | 5        | 3              |
    +----------+----------------+

应该只是:

select count(id) id_count, count(lang) NOT_NULL_LANG FROM TABLE_NAME;
  • COUNT() 函数与大多数 SQL 聚合函数一样,从计算中排除 NULL

使用 COUNTISNULLSUM 函数。

SELECT COUNT(ID) AS ID_COUNT,
COUNT(ID)-SUM(IFNULL(LANG, 1)) AS NOT_NULL_LANG 
FROM yourtable

输出

ID_COUNT    NOT_NULL_LANG
5           3

SQL Fiddle: http://sqlfiddle.com/#!9/458c9/6/0