MySQL多表查询排序

最近看到一个面试题,是关于mysql的多表查询并排序分组的
题目如下:
Music表包含所有歌曲信息,每首歌曲尤其对应的Id,Name,Year和Singer Id。
+----+---------+--------+-----------+
music表
+----+---------+--------+-----------+

Singer表包含所有歌手信息
+----+----------+
singer表
+----+----------+

请编写一个SQL查询语句,找出每个歌手年份最新的一首歌曲名字
+------------+----------+--------+
分组排序表
+------------+----------+--------+
建表语句

-- Music表包含所有歌曲信息,每首歌曲尤其对应的Id,Name,Year和Singer Id
CREATE TABLE music(
	id INT PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(20),
	`year` INT,
	sign_id INT
)

INSERT INTO music(id,name,year,sign_id) VALUES(null,'七里香',2003,1),
(null,'吻别',2000,2),
(null,'如果爱',2001,2),
(null,'菊花台',2005,1);

-- Singer表包含所有歌手信息
CREATE TABLE signer(
	id INT PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(20)
)

INSERT INTO signer(id,name) VALUES(null,'周杰伦'),
(null,'张学友');

查询语句

SELECT
	s. NAME AS Signer,
	m. NAME,
	m. YEAR
FROM
	signer s
INNER JOIN (
	SELECT
		*
	FROM
		music
	ORDER BY
		`year` DESC
) AS m ON m.sign_id = s.id
GROUP BY
	s.id

因为我是一个新手,如果有什么更好的解题方法,欢迎写在评论里

欢迎关注我的个人博客 https://myblog.52fun.fun/

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值