sqlserver语句问题

哎码 发布于 2017/07/25 17:34
阅读 38
收藏 1

这个是表结构

CREATE TABLE [test] (
[id] int NOT NULL IDENTITY(1,1) ,
[name] varchar(64) COLLATE Chinese_PRC_CI_AS NULL ,
[score] int NULL ,
[user_id] int NULL ,
[create_time] datetime NULL ,
CONSTRAINT [PK__test__3213E83F5CEB2CE5] PRIMARY KEY ([id])
)

测试数据是这酱婶的

这个表大概意思就是学生的分数表,user_id是学生的Id,name是科目名,score是分数.

现在我想查出每个学生分数最高的那一科,查出来学生ID/科目/分数,然后我就写了一个这样的SQL:

SELECT
	a.maxScore,
	a.user_id,
	t.name
FROM
	(
		SELECT
			MAX (score) AS maxScore,
			user_id
		FROM
			test
		GROUP BY
			user_id
	) a
LEFT JOIN test t ON t.score = a.maxScore
AND t.user_id = a.user_id

感觉很LOW有木有,而同样的需求在MYSQL中只需要这样写

SELECT
	MAX(`score`) AS maxScore,
	`user_id`,
	`name`
FROM
	`test`
GROUP BY
	`user_id`

得到的是相同的结果

 

这样看上去就好多了,所以问一下大家上面那个sql有没有什么简单点的写法?

以下是问题补充:

@哎码:补充一下:就是group by 一个字段,但是查询的时候需要查到对应数据的另一个字段,mysql中是允许的,而sqlserver中就不允许,请问该如何查询?因为实际项目中我就碰到了一个这样的问题,而因为group by的限制,我的SQL就变得异常复杂 (2017/07/25 17:38)
加载中
返回顶部
顶部