Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在一行中计算非空值的MySQL查询_Mysql - Fatal编程技术网

在一行中计算非空值的MySQL查询

在一行中计算非空值的MySQL查询,mysql,Mysql,我正在尝试组合一个MYSQL查询,该查询将计算单行中select字段中非Null(或者更好的是非零)值的数量,然后根据计数从最低到最高排序。例如,我有一个包含5个字段的表。。。ID,姓名,分数1,分数2,分数3。我想计算每个记录的分数_1、分数_2和分数_3中存在值“0”的次数,然后从大多数非零值排序到最少值 ID Name Score_1 Score_2 Score_3 1 Dan 8 7 0 2 Joe 0

我正在尝试组合一个MYSQL查询,该查询将计算单行中select字段中非Null(或者更好的是非零)值的数量,然后根据计数从最低到最高排序。例如,我有一个包含5个字段的表。。。ID,姓名,分数1,分数2,分数3。我想计算每个记录的分数_1、分数_2和分数_3中存在值“0”的次数,然后从大多数非零值排序到最少值

ID Name Score_1 Score_2 Score_3 1 Dan 8 7 0 2 Joe 0 0 3 3 Chris 0 0 0 4 Mike 4 5 5 ID名称分数\u 1分数\u 2分数\u 3 1丹870 2乔0 3 3克里斯0 0 0 4迈克4 5 5 我假设查询必须看起来像这样

选择ID、名称、分数1、分数2、分数3,其中(???)按(???)排序

输出应该是这样的(ID 4首先显示,因为它有最少的非零条目)

ID名称分数\u 1分数\u 2分数\u 3 4迈克4 5 5 1丹870 2乔0 3 3克里斯0 0 0 我对mysql查询有些陌生,所以非常感谢您的帮助。我认为COUNT函数会有所帮助,但该函数似乎可以计算所有行中的列。也许有一种方法可以使用COUNT函数并将其限制为一行,这样就可以按该行计数对其进行排序了?

尝试以下方法:

Select id, Count1, Count2, Count3, Count4
From
    (Select 
        Sum(Case When IsNull(Score_1,0) = 0 Then 1 Else 0 End) Count1,
        Sum(Case When IsNull(Score_2,0) = 0 Then 1 Else 0 End) Count2,
        Sum(Case When IsNull(Score_3,0) = 0 Then 1 Else 0 End) Count3,
        Sum(Case When IsNull(Score_4,0) = 0 Then 1 Else 0 End) Count4
    From Table
    Group By Id) Z  -- This column (Id) better not be the PK for this table!!!
Order By Count1 + Count2 + Count3 + Count4

这应该满足您的要求:

SELECT ID, Name, Score_1, Score_2, Score_3
FROM Table1
ORDER BY (Score_1 = 0) + (Score_2 = 0) + (Score_3 = 0)
结果:

ID Name Score_1 Score_2 Score_3 4 Mike 4 5 5 1 Dan 8 7 0 2 Joe 0 0 3 3 Chris 0 0 0 ID名称分数\u 1分数\u 2分数\u 3 4迈克4 5 5 1丹870 2乔0 3 3克里斯0 0 0
令人惊叹的!这很有效。。。正是我想要的。我想肯定会更复杂。我没能让它工作。。。看起来它可能在'Sum'后面缺少一个闭括号,但在添加了闭括号之后,我仍然无法让它工作。 ID Name Score_1 Score_2 Score_3 4 Mike 4 5 5 1 Dan 8 7 0 2 Joe 0 0 3 3 Chris 0 0 0