选择查询,使那些行具有两个或两个以上的非零值

时间:2015-01-22 12:44:27

标签: mysql sql

我有一个包含8列的MySQL表(id,user,a,b,c,d,e,f) 我在其中列出了具有(0到9)值的不同用户列表,如下所示:

Id  User    A   B   C   D   E   F
1   0001    0   1   0   0   0   0
2   0002    0   5   8   4   6   5
3   0003    0   0   0   0   0   5
4   0004    2   6   4   5   4   1
5   0005    1   0   0   0   0   0
6   0006    7   6   5   4   0   9
7   0007    4   0   0   0   0   8]

我想要一个MySQL选择查询,它给出了具有两个或两个以上非零值的用户的列表。 所以查询应该返回记录id(2,4,6,7)。感谢

2 个答案:

答案 0 :(得分:4)

这是另一种方法

select *
from t
where
( 
  (A <> 0 )+
  (B <> 0) +
  (C <> 0 )+
  (D <> 0 )+
  (E <> 0 )+
  (F <> 0 ) 
) >= 2

不等于运算符会根据条件返回布尔值(0/1)值,您可以总结每列的结果并根据您的条件消除记录

DEMO

答案 1 :(得分:1)

试试这个。

select user  
from (
SELECT *,
       CASE WHEN a>0 THEN 1 ELSE 0 END + 
       CASE WHEN b>0 THEN 1 ELSE 0 END + 
       CASE WHEN c>0 THEN 1 ELSE 0 END + 
       CASE WHEN d>0 THEN 1 ELSE 0 END + 
       CASE WHEN e>0 THEN 1 ELSE 0 END + 
       CASE WHEN f>0 THEN 1 ELSE 0 END chk
FROM   yourtable 
) a 
where chk>=2