一旦使用限制,在查询中计数两次

时间:2010-05-18 04:11:14

标签: php mysql count

鉴于以下表格:

Table1
[class]   [child]
 math      boy1
 math      boy2
 math      boy3
 art       boy1

Table2
[child]   [glasses]
 boy1       yes
 boy2       yes
 boy3       no

如果我想查询每个班级的孩子数量,我会这样做:

SELECT class, COUNT(child) FROM Table1 GROUP BY class

如果我想查询每个戴眼镜的班级的孩子数量,我会这样做:

SELECT Table1.class, COUNT(table1.child) FROM Table1
LEFT JOIN Table2 ON Table1.child=Table2.child
WHERE Table2.glasses='yes' GROUP BY Table1.class

但我真正想做的是:

SELECT class, COUNT(child), COUNT(child wearing glasses)

坦率地说,我不知道如何只在一个查询中做到这一点。

帮助?

4 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情(不检查语法):

SELECT 
   class, 
   COUNT(distinct Table1.child), 
   SUM(IF(Table2.glasses='yes', 1, 0))
FROM Table1
LEFT JOIN Table2 ON Table1.child=Table2.child

有点hacky,你可能会发现在两个查询中这样做更容易,但这种技术对我有用了

答案 1 :(得分:1)

在MySQL中你可以这样做:

SELECT class,COUNT(child),SUM(IF(glasses ='yes',1,0)

答案 2 :(得分:0)

这不是一个完美的解决方案,它只是一种替代解决方案,

SELECT class AS a, COUNT( child ) AS b
FROM Table1
GROUP BY class
UNION ALL SELECT COUNT( table1.child ) AS a, Table1.class AS b
FROM Table1
LEFT JOIN Table2 ON Table1.child = Table2.child
WHERE Table2.glasses = 'yes'
GROUP BY Table1.class

输出结果为:

a   b
art     1
math    3
1   art
2   math

在这方面,我们可能会有一些想法来开发更多东西。

答案 3 :(得分:0)

也许帖子是5岁但我也是一个解决方案。

使用数字1和0表示yes / no和true / false将更容易。

解决方案是(如果您更改是' s并且没有' s为1和0):

SELECT class,     
COUNT(distinct Table1.child) AS NumbofChilds,     
SUM(Table2.glasses) AS ChildswithGlasses 

FROM Table1 INNER JOIN Table2 ON Table1.child=Table2.child

GROUP BY class;

必须检查语法,但我对我的表有类似的查询,它可以工作。