行中的SQL计数列等于特定值

时间:2014-04-28 17:59:54

标签: mysql sql database

我有一个包含多个列的注册表,其中包含“正在进行”或“已提交”等值。我正在尝试计算这些列中有多少等于“已提交”,因此我可以确定用户的完成百分比。下面的查询显然只返回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"

4 个答案:

答案 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 ,其中包含表格中已提交的值的总计数。