计算在 PHP 中设置的 SQL 结果中值的出现次数


Counting occurance of a value in SQL results set in PHP

>假设我有一张名字姓氏性别天生等人的表格。

我想数一数男性和女性的数量。

我可以做两个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查询会更快。