select * from table_name group by column_value用法

简欥 2017-10-20 01:57:57
看了资料select 后面跟的应该和group by后面的才对
但是今天看到了如标题的用法
但是这个用法在windows下可以使用,在linux下却无法使用

比如下表
+----+--------+---------+-------+
| id | name | subject | score |
+----+--------+---------+-------+
| 1 | 张三 | 语文 | 90 |
| 2 | 张三 | 数学 | 80 |
| 3 | 张三 | 英语 | 60 |
| 4 | 李四 | 语文 | 75 |
| 5 | 李四 | 数学 | 85 |
| 6 | 李四 | 英语 | 45 |
| 7 | 王五 | 语文 | 99 |
| 8 | 王五 | 数学 | 55 |
| 9 | 王五 | 英语 | 59 |
| 10 | 赵六 | 语文 | 88 |
| 11 | 赵六 | 数学 | 80 |
| 12 | 赵六 | 英语 | 90 |
| 13 | 田七 | 语文 | 77 |
| 14 | 田七 | 数学 | 100 |
| 15 | 田七 | 英语 | 90 |
+----+--------+---------+-------+

查询每个学生的最大分数的科目及分数
windows下可以用select * from student where score in(select max(score) from student group by name) group by name;
看了别人说的如果select *的话出现两条数据会自动选择第一条
但是linux下会直接报错,那么linux下该怎么用或者怎么查找出正确的答案呢?
...全文
338 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
walkuere 2017-10-23
  • 打赏
  • 举报
回复


select a.id,a.name ,b.subject
from table1 A join 
(select max(score) as bestscore,subject from table1 group by subject) B
on A.subject=b.subject and A.score=b.bestscore

我这里没有mssql记得是这样写
walkuere 2017-10-23
  • 打赏
  • 举报
回复
引用 2 楼 rui_love 的回复:
[quote=引用 1 楼 walkuere 的回复:] group by不可以select * 在group by在场的情况 select的东西,要么是group by 的一些变量,要么是统计结果,比如sum max
但是确实有这样用的 但是linux里不行[/quote] 首先你的写法有问题 如果A成绩第一名比如85分,在B成绩中是第二名,也会因为in而进入 正确的写法是

select id,name 
from table1 A join 
(select max(score) as bestscore,subject from table1 group by subject) B
on A.subject=b.subject and A.score=b.bestscore

手打的应该问题不大 另外不管什么sql应该是在windows和linux下应该一样 倒是mysql用limit代替mssql的top
简欥 2017-10-20
  • 打赏
  • 举报
回复
引用 1 楼 walkuere 的回复:
group by不可以select * 在group by在场的情况 select的东西,要么是group by 的一些变量,要么是统计结果,比如sum max
但是确实有这样用的 但是linux里不行
walkuere 2017-10-20
  • 打赏
  • 举报
回复
group by不可以select * 在group by在场的情况 select的东西,要么是group by 的一些变量,要么是统计结果,比如sum max

57,065

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧