根据条件更换过滤器

时间:2014-08-29 02:59:25

标签: mysql sql

我有一个包含数百行的表和一个“Color”列。此列“颜色”可以是0或1.有时,列可能会填充多于0的1,反之亦然。我想要的是:如果1比0更多,SELECT * FROM table WHERE Color = 0,则SELECT * FROM table WHERE Color = 1返回一个表达式。我怎么能这样做?

只是为了澄清:如果还有1比0更多,我想选择所有的0。否则,请相反。

3 个答案:

答案 0 :(得分:2)

您可以使用像这样的查询来找出最受欢迎的Color值:

SELECT Color FROM `table` GROUP BY Color ORDER BY COUNT(*) DESC LIMIT 1 

然后,将此查询用作WHERE条件的一部分,以获取其他颜色的记录。

SELECT * FROM `table` WHERE Color = 1 - (
    SELECT Color FROM `table` GROUP BY Color ORDER BY COUNT(*) DESC LIMIT 1 
)

SqlFiddle

答案 1 :(得分:1)

试试这个:

select y.* from yourtable y
inner join 
(select color, count(*) count
 from yourtable
 group by color 
 order by count desc
 limit 1) c on y.color = c.color

我们首先计算每个color的计数,然后返回最大计数的color。然后,我们将color加入源表,以获取color的所有记录。

SQLFiddle

答案 2 :(得分:0)

这是你想要的吗?

select (case when sum(color = 0) > sum(color = 1) then 'More 0s'
             when sum(color = 0) = sum(color = 1) then 'Same'
             else 'More 1s'
        end)
from table;