Php 在查询中计数两次,一次使用限制
鉴于下表:Php 在查询中计数两次,一次使用限制,php,mysql,count,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 SE
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) 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)
坦率地说,我不知道如何在一个问题上做到这一点
帮助?您可以尝试以下方法(不检查语法):
这是一个有点黑的问题,您可能会发现在两个查询中完成它更容易,但这种技术在紧要关头对我很有效,在MySQL中,您可以这样做:
选择类、计数(子)、和(如果(眼镜=‘是’,1,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
在这篇文章中,我们可能会对开发更多的东西有一些想法。也许这篇文章已经5年了,但我也有一个解决方案 使用1和0这样的数字表示是/否和真/假对您来说更容易 解决方案是(如果将“是”和“否”更改为1和0):
必须检查语法,但我对我的表有一个类似的查询,它可以工作。尝试嵌套选择如何?我不知道如何使嵌套选择符合按类分组的要求。请随意发布解决方案!请发布您对该结果的正确查询。。请参阅Dan Head的答案-这就是我需要的按顺序排序的结果发帖时,丹·海德稍早做出了同样的回应,但对你们两人来说都是+1