当前位置:网站首页>Mysql 5.7 取分组第一条
Mysql 5.7 取分组第一条
2022-07-26 23:23:00 【水晶心泉】
以下表为例,需要取每个班级、被选的次数最多的学科,比如1班的有三个选数学的,一个选语文的,那么期望返回的是数学,其他同理。
| id | name | class | course |
|---|---|---|---|
| 1 | 张三 | 1 | 数学 |
| 2 | 李四 | 1 | 数学 |
| 3 | 王五 | 1 | 数学 |
| 4 | 赵六 | 1 | 语文 |
| 5 | 黑七 | 2 | 语文 |
| 6 | 猪八 | 2 | 语文 |
| 7 | 琴九 | 2 | 数学 |
| 8 | 王十 | 3 | 数学 |
| 9 | 毛十一 | 3 | 数学 |
| 10 | 萧十二 | 3 | 数学 |
| 11 | 阿十三 | 3 | 语文 |
第一种方法: limit + group by
例
SELECT t.*
FROM
(
SELECT ta.class,ta.course,count(*) as counts
FROM courses as ta
group by ta.class,ta.course
order by counts desc // 在这里排序
LIMIT 1000 //这里是必须的,而且好像最大值是1万
) t
GROUP BY t.class //外层使用分组
返回结果如下
| class | course | counts |
|---|---|---|
| 1 | 数学 | 3 |
| 2 | 语文 | 2 |
| 3 | 数学 | 3 |
在站内找了几篇博文,基本都是这个套路,也许这种方法性能会好一些,而且好像可以直接取到最大值那一整行的数据,可以说非常方便了。
比如这篇博文还对优化进行了分析:https://blog.csdn.net/u013066244/article/details/116461584
但是:由于公司服务器启用了ONLY_FULL_GROUP_BY,所以没法使用。
第二种方法:group_concat+substring_index
select tb.class,SUBSTRING_INDEX(GROUP_CONCAT(tb.course order by counts desc),',',1) as course
from
(
SELECT ta.class,ta.course,count(*) as counts
FROM courses as ta
group by ta.class,ta.course
) as tb
group by tb.class;
返回结果如下
| class | course |
|---|---|
| 1 | 数学 |
| 2 | 语文 |
| 3 | 数学 |
关于这个方法,已经有博主写过了,个人觉得很详细了,连接在此:https://blog.csdn.net/MyfishCake/article/details/120175776
边栏推荐
- 使用注解方式实现 Redis 分布式锁
- LeetCode->二分法(三)
- On the first day of staying in the blog [for 80000]!
- Hcip day 5 OSPF extended configuration experiment
- 【洋哥带你玩转线性表(三)——双向链表】
- [C language] factorial implementation
- 【洋哥带你玩转线性表(四)——链式队列】
- 【自此文之后,学习链表一片坦途】
- N methods of SQL optimization
- Prometheus operation and maintenance tool promtool (III) debug function
猜你喜欢
随机推荐
【你了解Cache吗——全面理解高速缓冲存储器】
动态设置小程序swiper的高度
Plato Farm有望通过Elephant Swap,进一步向外拓展生态
Redis安装及运行(linux)
Hcip day 6 OSPF static experiment
Interesting C language
Hcip day 3 Wan topology experiment
从初级程序员到架构师学习路线+配套学习资源完整版
HCIP-第四天-OSPF路由协议
bp 插件临时代码记录
TCP three handshakes and four disconnects
Solve prime numbers between 100 and 200
Summary of dataset operations in ppocrlabel format.
Hcip day 1
多线程的具体使用
通达信开户安全么
The latest JD SMS login + silly girl robot nanny level deployment tutorial (July 24, 2022)
I was fired at the age of 30. I want to understand a few things
文章摘要智能提取【基于BERT技术】
[draw rectangular coordinate system in C language]








