題目只有一題,5分鐘能寫留下面試,不能寫就直接讓我走人,HR當場計時,一看感覺很簡單,但沒有按要求實作.題目大意如下兩表users表和money表,只能用一條SQL計算每個用戶每個月[不確定有幾個月]的消費金額,得出result表所示結果.要求使用存盤程序,

我當時想寫的是
select a.username '用戶名',ifnull(b.ye,0) as '一月份' ,ifnull(b2.ye,0) as '二月份' ,ifnull(b3.ye,0) as '三月份' from users a
LEFT JOIN money b on a.userid=b.userid and b.month='一月份'
LEFT JOIN money b2 on a.userid=b2.userid and b2.`month`='二月份'
LEFT JOIN money b3 on a.userid=b3.userid and b3.`month`='三月份' 但不符合要求,如果使用存盤程序,一個星期了都沒寫出來,頭發白了自尊心受挫了,誰能幫幫我!
uj5u.com熱心網友回復:
這個要用行變列的語法 pivot這個東東uj5u.com熱心網友回復:
select *from
(
SELECT a.userid,b.username,[month],sum(ye) as ye from [money] a left join [users] b on a.userid=b.userid group by a.userid,b.username,a.[month]
) t
pivot (sum(ye) for t.[month] in ([一月份],[二月份],[三月份],[四月份])) as ourpivot
order by userid
uj5u.com熱心網友回復:
應該是mysql 動態 拼接sql 結合case when實作uj5u.com熱心網友回復:
MySQL沒有pivot這樣的語法。可以寫成 如下語法
sum(case when yue = 一月 then num else 0 end)
uj5u.com熱心網友回復:
查了下 mysql 8.0貌似都沒pivotuj5u.com熱心網友回復:
重點是給多少錢,錢少了估計五個小時也寫不出,錢到位了,分分鐘搞定uj5u.com熱心網友回復:
都沒回到點上,資料庫是指定了mysql,要求使用存盤程序……uj5u.com熱心網友回復:
不好意思,忘了說明資料庫型別了。uj5u.com熱心網友回復:
動態拼接month這個列 來進行case when 行轉列因為題目已經說得很清楚了 不確定有多少個月 所以寫死的肯定是錯誤的
uj5u.com熱心網友回復:
十二個月是常識,不確定有多少個月,說的是不確定不知道有哪些月吧uj5u.com熱心網友回復:
SELECT u.username,a.`一月份`,a.`二月份`,a.`三月份`from (SELECT
m.userid,
sum( CASE WHEN m.MONTH = '一月份' THEN m.ye ELSE NULL END ) AS '一月份',
sum( CASE WHEN m.MONTH = '二月份' THEN m.ye ELSE NULL END ) AS '二月份',
sum( CASE WHEN m.MONTH = '三月份' THEN m.ye ELSE NULL END ) AS '三月份'
FROM
money m
GROUP BY
m.userid
ORDER BY
m.userid) a left JOIN users u on a.userid = u.userid
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/107426.html
標籤:疑難問題
上一篇:這是什么bug?
