像这样的东西会起作用:
SELECT SUM(IF(t.gender='m',1,0)) AS total_males
, SUM(IF(t.gender='f',1,0)) AS total_females
FROM mytable t
这里的“技巧”是我们使用条件测试为每一行返回 0 或 1,然后将 0 和 1 相加。为了使这一点更清楚一点,我使用SUM
聚合函数而不是COUNT
,尽管COUNT
可以很容易地使用,尽管我们需要返回一个 NULL 来代替零。
SELECT COUNT(IF(t.gender='m',1,NULL)) AS total_males
, COUNT(IF(t.gender='f',1,NULL)) AS total_females
FROM mytable t
考虑此查询的 SELECT 列表中的两个表达式:
SELECT COUNT(1)
, SUM(1)
FROM mytable t
将返回相同的值。
如果要避免使用 MySQLIF
函数,也可以使用 ANSI SQLCASE
表达式来完成:
SELECT SUM( CASE WHEN t.gender = 'm' THEN 1 ELSE 0 END )) AS total_males
, SUM( CASE WHEN t.gender = 'f' THEN 1 ELSE 0 END )) AS total_females
FROM mytable t