0

假设我有一张名字姓氏性别国籍等的人的表。

我想计算男性的数量和女性的数量。

我可以做两个 SQL:

SELECT COUNT(id) FROM people WHERE sex = 'male'
SELECT COUNT(id) FROM people WHERE sex = 'female'

但是我可以做一个查询:

SELECT * FROM people

然后计算“男性”和“女性”的出现次数?循环遍历整个结果集是唯一的方法吗?

编辑:我问这个的原因是因为性能。我将有多个 JOIN 并且表大小超过 2k 行。而且,我不会只统计性别,还会统计国籍、年龄、语言等很多栏目。

我只是想确保我选择了一种使用最少资源的方法。我不希望查询和 PHP 脚本需要很长时间才能运行。

谢谢。

4

3 回答 3

3

您可以通过对sex列进行分组并使用该COUNT( )函数聚合其他列来做到这一点。

SELECT   sex, 
         COUNT(*) GenderCount
FROM     people
GROUP BY sex

PS:请将您的专栏名称更改为Gender而不是sex..呵呵

聚合函数和这里的一些附加信息

于 2012-08-09T07:40:02.063 回答
0
select SUM(sex='male') AS countmale, SUM(sex='female') AS countfemale from people
于 2012-08-09T07:38:48.967 回答
0

要在一行中获得输出,您可以尝试以下操作:

SELECT SUM(IF(sex = 'male', 1, 0)) AS male_count,
       SUM(IF(sex = 'female', 1, 0)) AS fe_male_count
FROM people;

要获得多行输出,请尝试以下操作:

SELECT sex, COUNT(1) AS cnt
FROM people
GROUP BY sex;

但是我认为GROUP BY查询会更快。

于 2012-08-09T07:38:51.417 回答