我有一个包含数百行的表和一个“Color”列。此列“颜色”可以是0或1.有时,列可能会填充多于0的1,反之亦然。我想要的是:如果1比0更多,SELECT * FROM table WHERE Color = 0
,则SELECT * FROM table WHERE Color = 1
返回一个表达式。我怎么能这样做?
只是为了澄清:如果还有1比0更多,我想选择所有的0。否则,请相反。
答案 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
)
答案 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
的所有记录。
答案 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;