[英]Mysql and case statement not working
/*-------------temp table--------------*/
CREATE TEMPORARY TABLE IF NOT EXISTS bowlpick.tempschedule AS
(SELECT * FROM bowlpick.schedule
where season = (select max(year) from bowlpick.season));
/*-------------temp table--------------*/
set @g1= (select winner from bowlpick.tempschedule where game =1);
select date,name, @g1,bowl1 Pick,comf1
,case
when bowl1 = @g1 then comf1
when bowl1 <> @g1 then -comf1
else '0' end pts
from bowlpick.picks
where year(date) = (select max(year) from bowlpick.season)
order by bowl1 desc limit 5
<--------------------Table----------------->
name @g1 Pick comf1 pts
Player 1 Boise State Washington 7 -7
Player 2 Boise State Boise State 30 -30
Player 3 Boise State Boise State 21 -21
Player 4 Boise State Boise State 27 -27
Player 5 Boise State Boise State 15 -15
為什么這不起作用??? 最后四個點應為正數,而不是負數。 好像變量(@ g1)在'CASE'部分中不起作用。 當“選擇”部分時,它可以正常工作。 如果我對獲勝者(博伊西州)進行了硬編碼,則它可以正常工作。 變量在case語句中不起作用嗎?
不知道為什么要使用臨時表,可以在單個查詢中進行操作,請參見下面的示例以了解開始的地方,我注意到的另一件事是該案例返回了兩個case語句的數字和else的字符串。 不僅如此,case語句還有2個WHEN
語句,這些語句肯定覆蓋了所有基數,這意味着永遠不會選擇“ 0”。
SELECT
bowlpick.picks.date
,bowlpick.picks.name
,bowlpick.tempschedule.winner
,bowlpick.picks.bowl1 Pick
,bowlpick.picks.comf1
,CASE
WHEN bowlpick.picks.bowl1 = bowlpick.tempschedule.winner THEN bowlpick.picks.comf1
WHEN bowlpick.picks.bowl1 <> bowlpick.tempschedule.winner THEN -bowlpick.picks.comf1
ELSE 0
END pts
FROM
bowlpick.picks
LEFT JOIN bowlpick.tempschedule ON year(bowlpick.picks.date) = bowlpick.tempschedule.season
WHERE
bowlpick.tempschedule.game =1
ORDER BY
bowl1 DESC
LIMIT 5
以下是一些額外的工作,消除了對臨時表的需要(鏈接和分組將需要更好地定義,但是對於不完整的架構,這是我所能做的最好的事情)
SELECT
p.Date
,p.Name
,s.Winner
,p.Bowl1 Pick
,p.Comf1
,CASE
WHEN p.Bowl1 = s.Winner THEN p.Comf1
WHEN p.Bowl1 <> s.Winner THEN -p.Comf1
ELSE 0
END pts
FROM
picks p
LEFT JOIN schedule s ON YEAR(p.Date) = s.Season
WHERE
s.game = 1
GROUP BY
s.Season, p.Date
HAVING
s.Season = MAX(s.Season)
ORDER BY
p.Bowl1 DESC
LIMIT 5
他是我的SQL提琴演奏者
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.