鉴于以下表格:
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)
坦率地说,我不知道如何只在一个查询中做到这一点。
帮助?
答案 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)
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;
必须检查语法,但我对我的表有类似的查询,它可以工作。