2012-09-05 49 views
-1

在我的数据库表我有一个容纳两列0或1MYSQL计数功能合并

我有typeGender,其中类型是指0 => teacher1 => student和性别:0 => male1 => female

如何编写单个sql查询以获取教师,学生,男性和女性的数量?

现在我有:

select COUNT(type) as teachers from my_table where type = 0; // Teachers 
select COUNT(type) as students from my_table where type = 1; // Students 
select COUNT(gender) as males from my_table where type = 0; // Males 
select COUNT(gender) as females from my_table where type = 1; // Females 

它可以在一个查询做什么?如果是这样,怎么样?

回答

1

这样你就可以在单个查询中完成它。如果你只有两种类型的数据在你的表,那么你就不需要在WHERE子句指定IN条件:

SELECT SUM(IF(type = 1, 1, 0)) as students, 
     SUM(IF(type = 0, 1, 0)) as teachers, 
     SUM(IF(gender = 1, 1, 0)) as females, 
     SUM(IF(gender = 0, 1, 0)) as males 
FROM my_table 
WHERE type IN(0,1) 
     AND gender IN(0,1); 
+0

感谢你,工作很好 –

0

是的,你可以。你有没有尝试把你的每个SQL语句放在一起?
SQL1 as fld1, SQL2 as fld2, someOtherFieldsIfNeeded FROM ...

1

你可以实现这一目标使用子查询。

SELECT COUNT(type) AS students, 
    (SELECT COUNT(type) FROM my_table WHERE type = 0) As teachers, 
    (SELECT COUNT(gender) FROM my_table WHERE gender = 1) AS females, 
    (SELECT COUNT(gender) FROM my_table WHERE gender = 0) AS males 
FROM my_table WHERE type = 1; 
+0

谢谢你的作品:) –

3

您可以使用CASE对于使用SUM功能:

SELECT SUM(CASE type WHEN 1 THEN 1 ELSE 0 END) AS students, 
     SUM(CASE type WHEN 0 THEN 1 ELSE 0 END) AS teachers, 
     SUM(CASE gender WHEN 1 THEN 1 ELSE 0 END) AS females, 
     SUM(CASE gender WHEN 0 THEN 1 ELSE 0 END) AS males 
FROM my_table; 

您还可以使用COUNT功能,而不是SUM这样的:

SELECT COUNT(CASE type WHEN 1 THEN 1 ELSE NULL END) AS students, 
     COUNT(CASE type WHEN 0 THEN 1 ELSE NULL END) AS teachers, 
     COUNT(CASE gender WHEN 1 THEN 1 ELSE NULL END) AS females, 
     COUNT(CASE gender WHEN 0 THEN 1 ELSE NULL END) AS males 
FROM my_table; 

See this SQLFiddle

+0

非常感谢你,这也适用,但是@omesh首先发布了它,因此接受了他的回答 –