>假设我有一张名字姓氏性别天生等人的表格。
我想数一数男性和女性的数量。
我可以做两个SQL:
SELECT COUNT(id) FROM people WHERE sex = 'male'
SELECT COUNT(id) FROM people WHERE sex = 'female'
但是我可以做一个查询吗:
SELECT * FROM people
然后数一数"男"和"女"的出现次数?循环遍历整个结果集是唯一的方法吗?
编辑:我问这个问题的原因是因为性能。我将有多个 JOIN,并且表大小超过 2k 行。而且,我不仅要数性别,还要数国籍、年龄、语言等很多栏目。
我只想确保我选择了一种使用最少资源的方法。我不希望查询和 PHP 脚本需要很长时间才能运行。
谢谢。
可以通过
对sex
列进行分组并使用 COUNT( )
函数聚合其他列来实现此目的。
SELECT sex,
COUNT(*) GenderCount
FROM people
GROUP BY sex
PS:请将您的专栏名称更改为Gender
而不是sex
.. 嘿嘿嘿
聚合函数的一些附加信息 和这里
select SUM(sex='male') AS countmale, SUM(sex='female') AS countfemale from people
要在一行中获取输出,您可以尝试以下操作:
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
查询会更快。