MySQL查询计算单行中的非空值

时间:2010-08-31 19:00:07

标签: mysql

我正在尝试将一个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函数并将其限制为单行,以便按行计数排序?

2 个答案:

答案 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