有一個學生分數表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(主鍵)讓數據集先進行排序再分組取排序后的第一條
但是: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/