在一行中计算非空值的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 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函数并将其限制为一行,这样就可以按该行计数对其进行排序了?尝试以下方法:在一行中计算非空值的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
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