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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM