假设我有一个名字性别自然等名字的人的表。
我想计算男性人数和女性人数。
我可以做两个SQL:
SELECT COUNT(id) FROM people WHERE sex = 'male'
SELECT COUNT(id) FROM people WHERE sex = 'female'
但我可以进行一次查询:
SELECT * FROM people
然后计算“男性”和“女性”的出现次数? 循环遍历整个结果集是唯一的方法吗?
编辑:我问这个的原因是因为性能。我将有多个JOIN,表大小超过2k行。此外,我不会只计算性别,我还会计算国籍,年龄,语言和许多其他专栏。
我只是想确保选择一种使用最少量资源的方法。我不希望查询和PHP脚本花费很长时间才能运行。
感谢。
答案 0 :(得分:3)
您可以通过对sex
列进行分组,并使用COUNT( )
功能聚合其他列来实现这一目标。
SELECT sex,
COUNT(*) GenderCount
FROM people
GROUP BY sex
PS:请将列名更改为Gender
而不是sex
..呵呵
<强> Some Additional Information for Aggregate Functions 强> 和 HERE
答案 1 :(得分:0)
select SUM(sex='male') AS countmale, SUM(sex='female') AS countfemale from people
答案 2 :(得分: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
查询会更快。