我有一个包含多个列的注册表,其中包含“正在进行”或“已提交”等值。我正在尝试计算这些列中有多少等于“已提交”,因此我可以确定用户的完成百分比。下面的查询显然只返回0或1,因为它只查询一列,但我如何合并其他列?
例如,我想计算以下列中有多少等于“已提交”或“已接受”:
network_user_status
work_ed_status
chores_status
class_schedule_status
SELECT COUNT(id) FROM registration WHERE username = "ajackson" AND enrollment_agreement_status = "accepted" OR enrollment_agreement_status = "submitted"
答案 0 :(得分:2)
首先,您的查询没有按照您的想法进行。 username
条件仅适用于“已接受”。我很确定你的意思是:
SELECT COUNT(id)
FROM registration
WHERE username = 'ajackson' AND enrollment_agreement_status in ('accepted', 'submitted')
如果要计算一个或另一个或两个值,请使用条件聚合。这在MySQL很容易:
select count(id), sum(enrollment_agreement_status = 'accepted') as accepted,
sum(enrollment_agreement_status = 'submitted') as submitted
from registration
where username = 'ajackson';
答案 1 :(得分:0)
count不依赖于您在查询中引用的列数。它返回满足您特定条件的表的所有行。它返回0或1可能是因为只有一个“ajackson”注册。
你可能想要这样的东西。
select t1.numaccepted, t2.numsubmitted, (t1.numaccepted / t2.numsubmitted) as YourPercent FROM
(Select username, count(*) as numaccepted from registration where enrollment_agreement_status = "accepted" GROUP BY username) t1, (select username,count(*) as numsubmitted from registration where enrollment_agreement_status = "submitted" GROUP BY username) t2
答案 2 :(得分:0)
尝试类似...... SELECT enrollment_agreement_status,COUNT(*)FROM registration 用户名=" ajackson" AND enrollment_agreement_status ="已接受" 或者enrollment_agreement_status ="已提交" GROUP BY id;
此查询的两个重要部分是您要选择的内容以及您要分组的内容。在这种情况下,查询返回第一列中的状态以及第二列中表中状态发生的次数。导致这种情况发生的查询的两个重要部分是" enrollment_status_agreement,COUNT(*)"跟随select和" GROUP BY enrollment_agreement_status"在最后。选择字段相当明显但是" group by"为指定的非COUNT()字段组合相同的结果。这意味着如果您执行类似" GROUP BY field1,field2"它将为两个字段中每个唯一值组合返回一行。
答案 3 :(得分:0)
您可以使用:
COUNT(CASE WHEN value = 'submitted' THEN 1 ELSE NULL END) AS SubmittedCount
这将返回一列 SubmittedCount ,其中包含表格中已提交的值的总计数。