我有一個包含幾百行和一列「顏色」的表格。此列的「顏色」可以是0或1.有時,該列可能會填充更多的1而不是0,反之亦然。我想要的是:返回的表達式,如果有更多的1比0,則SELECT * FROM table WHERE Color = 0
,否則SELECT * FROM table WHERE Color = 1
。我怎樣才能做到這一點?根據條件更改過濾器
只是澄清:如果有更多的1比0,我想選擇所有的0。否則,相反。
我有一個包含幾百行和一列「顏色」的表格。此列的「顏色」可以是0或1.有時,該列可能會填充更多的1而不是0,反之亦然。我想要的是:返回的表達式,如果有更多的1比0,則SELECT * FROM table WHERE Color = 0
,否則SELECT * FROM table WHERE Color = 1
。我怎樣才能做到這一點?根據條件更改過濾器
只是澄清:如果有更多的1比0,我想選擇所有的0。否則,相反。
您可以使用查詢像這樣的找出哪些顏色的值是最流行:
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? – 2014-08-29 03:28:05
子查詢獲得最流行的(1或0),並且您想要另一個(0代表1,0代表0)。 '1 - ()'是我懶惰的做法。你也可以通過'Color <>'或將子查詢順序從'DESC'改爲'ASC' – Dan 2014-08-29 03:30:08
如果'0'和'1'的計數相等會發生什麼?也許問題在於OP,就像他們想要什麼樣的行爲一樣。如果在平等的時候他們不關心他們是否得到「0」或「1」。 – 2014-08-29 03:53:21
這是你想要的嗎?
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;
試試這個:
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
的所有記錄。
@downvoter,請評論 – 2016-09-17 14:19:45