左连接表,但后来对列 - SQL

时间:2014-02-17 03:09:58

标签: mysql sql database

我有一个包含2个表的数据库,我正试图以特定的方式加入它们。

表1:简介

列:friend_ID,性别,birthyear,hometown,checkins

表2:教育

列:friend_ID,school_name,school_type

我想像这样离开加入:

    SELECT 
       friend_ID, birthyear, checkins 
   FROM Friend_Profile 
   LEFT JOIN 
       Education on Profile.friend_ID = Education.friend_ID

然后我想将birthyear改为age(2013-birthyear)并将school_type编码为类别。 3个'研究生院',2个'学院',1个'高中'和0个'其他或没有数据',只保留每行的最高编号。 (教育表通常包含代表同一friend_ID的不同school_type的多行。

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

抱歉延误。我创建了表并在localhost上运行语句。

教育表:Screenshot

个人资料表:Screenshot

在SQL语句下面运行后的结果:Screenshot

SELECT profile.friend_id, birthyear, checkins, MAX( 
CASE WHEN school_type =  'High School'
THEN 1 
WHEN school_type =  'College'
THEN 2 
WHEN school_type =  'Graduate School'
THEN 3 
ELSE 0 
END ) AS school_type
FROM profile
LEFT JOIN education ON profile.friend_id = education.friend_ID
GROUP BY (
profile.friend_id
)

<强>更新

如果您想与去年合作,请使用YEAR(CURDATE())获取当前年份(2014年),或将其替换为2013年。如果要添加的select语句中缺少任何字段,显然可以添加更多字段。

结果:Screenshot

它显示14,因为我使用了YEAR(CURDATE())而不是2013.您可以根据需要更改它。

SELECT profile.friend_id, YEAR(CURDATE()) - birthyear as age, checkins, MAX( 
CASE WHEN school_type =  'High School'
THEN 1 
WHEN school_type =  'College'
THEN 2 
WHEN school_type =  'Graduate School'
THEN 3 
ELSE 0 
END ) AS school_type
FROM profile
LEFT JOIN education ON profile.friend_id = education.friend_ID
GROUP BY (
profile.friend_id
)