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

时间:2012-08-09 07:37:01

标签: php mysql resultset

假设我有一个名字性别自然等名字的人的表。

我想计算男性人数和女性人数。

我可以做两个SQL:

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

但我可以进行一次查询:

SELECT * FROM people

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

编辑:我问这个的原因是因为性能。我将有多个JOIN,表大小超过2k行。此外,我不会只计算性别,我还会计算国籍,年龄,语言和许多其他专栏。

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

感谢。

3 个答案:

答案 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查询会更快。