像這樣將工作:
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
將返回相同的數值。
如果你想避免的MySQL IF
功能,這也可以使用ANSI SQL CASE
表達來完成:
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
這與'sequel'(與'SQL'相對)如何? –