Mysql 左键联接表,然后使用列-SQL
我有一个包含两个表的数据库,我正试图以一种特定的方式连接它们 表1:概况 栏目:朋友ID、性别、生日、家乡、登记 表2:教育 列:朋友ID、学校名称、学校类型 我想像这样离开加入:Mysql 左键联接表,然后使用列-SQL,mysql,sql,database,Mysql,Sql,Database,我有一个包含两个表的数据库,我正试图以一种特定的方式连接它们 表1:概况 栏目:朋友ID、性别、生日、家乡、登记 表2:教育 列:朋友ID、学校名称、学校类型 我想像这样离开加入: SELECT friend_ID, birthyear, checkins FROM Friend_Profile LEFT JOIN Education on Profile.friend_ID = Education.friend_ID 然后我想把生日改为
SELECT
friend_ID, birthyear, checkins
FROM Friend_Profile
LEFT JOIN
Education on Profile.friend_ID = Education.friend_ID
然后我想把生日改为年龄(2013年生日),并将学校类型编码为类别。3表示“研究生院”,2表示“学院”,1表示“高中”,0表示“其他或无数据”,每行保留最高数字。(教育表通常包含多行,表示同一朋友ID的不同学校类型
非常感谢您的帮助。很抱歉延迟。我创建了表并在localhost上运行了该语句 教育表: 配置文件表: 运行以下SQL语句后的结果: 更新: 使用
YEAR(CURDATE())
获取当前年份(2014年),或者如果要使用去年,则将其替换为2013年。如果要添加的select语句中缺少任何字段,显然可以添加更多字段以获取
结果:
它显示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
)
从当前年份中减去生日以获得年龄和用例,用适当的整数替换学校类型。您应该能够在SELECT语句中完成所有操作。我也不希望每个朋友id显示超过一行。例如,如果一个朋友id在两个单独的列中列出了大学和研究生院,我只希望研究生院显示,该friend_id应该只出现一次。此外,一些friend_id根本不出现在教育表中,应该得到一个0而不是null。您可以将任何null的返回值替换为零,您可以得到最大学校类型。好的,但我仍然不明白如何为给定的frien只添加最高学校类型d_id如果你只想要最高的学校类型,你可以使用max和group by来确保在你从case中得到结果后得到最大的数字。因此case可以让你得到你需要的数字,max和group by会查找共享好友id的所有行中最高的一行。另一个问题……是否可以过滤掉所有情况ns,其中生日为空,然后执行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
)