随笔 - 256  文章 - 2  评论 - 18  阅读 - 123万

mysql分组后获取每个组排序后的第一条数据(整行)

有一个学生分数表student,数据结构是这样的

CREATE TABLE `student` (
`id` int(11) NOT NULL,
`student_id` int(11) DEFAULT NULL,
`line` int(11) DEFAULT NULL,
`subject_type` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 

 

 

 

我想根据学生分组  ,得到每个分组中分数最高的那一条数据:

大约20万数据

 

正确写法:

复制代码
 1 SELECT
 2     max.*, MAX(max.line) lineMax
 3 FROM
 4     (
 5         SELECT DISTINCT
 6             (a.id) tt,
 7             a.*
 8         FROM
 9             student a
10         ORDER BY
11             a.line DESC
12     ) max
13 GROUP BY
14     student_id
distinct
复制代码

  DISTINCT(主键)让数据集先进行排序再分组取排序后的第一条

 

但是:sharding-jdbc不支持此操作

分库分表后,就成为了一个阉割型的数据库。很多sql的特性是不支持的,需要使用其他手段改进。以下以3.0.0版本进行描述。

distinct

having

sharding-jdbc不支持having,可使用嵌套子查询进行替代

union

sharding-jdbc不支持union(all),可拆分成多个查询,在程序拼接

关于子查询

sharding-jdbc不支持在子查询中出现同样的表,

由于归并的限制,子查询中包含聚合函数目前无法支持。


 

 

 

 

 

 

 

 

 

 

转自:https://blog.csdn.net/persistencegoing/article/details/92764058

https://shardingsphere.apache.org/document/current/cn/features/sharding/use-norms/sql/

posted on   腾逸  阅读(8711)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 我与微信审核的“相爱相杀”看个人小程序副业
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示