我正在尝试将一个MYSQL查询放在一起,该查询将计算单行中选择字段中的非Null(或更好,非零)值的数量,然后从最低到最高排序(基于计数)。例如,我有一个包含5个字段的表... ID,Name,Score_1,Score_2,Score_3。我想计算每个记录的Score_1,Score_2和Score_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,姓名,Score_1,Score_2,Score_3,其中(???)ORDER BY(???)
输出应该如下所示(ID 4首先显示,因为它具有最少量的非零条目)...
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
我对mysql查询有点新,所以任何帮助都会非常感激。我认为COUNT函数会有所帮助,但该函数似乎计算所有行的列。也许有一种方法可以使用COUNT函数并将其限制为单行,以便按行计数排序?
答案 0 :(得分:2)
这应该做你想要的:
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
答案 1 :(得分: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