[英]Conditional column for query based on other columns in MySQL
我很確定我已經在某個地方見過這個,但我找不到合適的術語,所以我遇到了麻煩......
假設我有一個包含用戶信息的表(讓我們假設它是由比我更多付費的人創建的,因此修改模式不是一種選擇。)用戶信息的各個列中有DOB和職稱的列。 我想要一個查詢,根據這些列中的內容,將包含一個名為“Real_Title”的額外列,例如:
User_id Job_Title DOB
joe_1 manager 01/01/1950
jim_1 associate 01/01/1970
jill_1 associate 01/01/1985
jane_1 manager 01/01/1975
查詢:
SELECT User_id, Real_Title FROM users
IF (YEAR(DOB) < 1980 AND Job_Title = "manager")
{Real_Title = "Old Fart"}
ELSE IF (YEAR(DOB) < 1980 AND Job_Title = "associate")
{Real_Title = "Old Timer"}
ELSE IF (YEAR(DOB) > 1980 AND Job_Title = "manager")
{Real_Title = "Eager Beaver"}
ELSE IF (YEAR(DOB) > 1980 AND Job_Title = "associate")
{Real_Title = "Slacker"}
我知道上面的內容不僅錯誤,而且編碼效率也非常低,但我想把這個想法貫穿其中。
有沒有一種方法,不使用連接,根據同一個表中一個或多個其他列中的信息填充列?
目前我在獲取結果后在PHP腳本中使用了一些東西來將這些結果引導到我想要的組中,但如果可以在查詢中完成,那么將查詢移植到其他腳本和語言會更容易。
謝謝!
select User_id
,case
when (YEAR(DOB) < 1980 AND Job_Title = "manager") then 'Old Fart'
when (YEAR(DOB) < 1980 AND Job_Title = "associate") then 'Old Timer'
when (YEAR(DOB) > 1980 AND Job_Title = "manager") then 'Eager Beaver'
when (YEAR(DOB) > 1980 AND Job_Title = "associate") then 'Slacker'
else 'nobody'
end
as Real_Title
from users
如果我理解正確,我認為您正在尋找CASE聲明 :
SELECT User_id,
(CASE
WHEN YEAR(DOB) < 1980 AND Job_Title = "manager" THEN "Old Fart"
WHEN YEAR(DOB) < 1980 AND Job_Title = "associate" THEN "Old Timer"
...
ELSE "Unknown Title"
END) AS Real_Title
FROM users;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.