2017-12-05 12 views
0
| id | uid | score | date | 
———————————————————————————————— 
| 1 | aaa | 10  | 2017.7.7| 

| 2 | bbb | 5  | 2017.7.7| 

| 3 | aaa | 15  | 2017.7.7| 

| 4 | bbb | 20  | 2017.7.8| 

私は誰の最大得点を得たいと思いますし、すべての行にidとdateのようなすべてのフィールドを含める必要があります。MySQL 5.7で最大得点と最大得点のフィールドを取得

| id | uid | score | date | 
————————————————————————————— 
| 4 | bbb | 20 | 2017.7.8| 

| 3 | aaa | 15 | 2017.7.7| 

Select max(score) as score, id, date, uid from data group by uid order by score desc

私はV5.7の前に、私は、MySQLに欲しいものを得るために、このSQLを使用することができますが、sql_modeののONLY_FULL_GROUP_BYがあるのMySQL 5.7の後、あなたは知っています。だから私は前と同じように結果を得ることができません。私はモードを無効にするいくつかの答えがあることがわかります。しかし、私はモードを無効にしないだけでなく、これを行うことができるSQLがあるかどうかを知りたい。

+1

のこの種を扱うために選んすべき行を決定する別の属性下記のnswersはあなたの問題を解決し、親切に答えとしてマークしたり、答えをアップアップしたりするのを助けました。 –

答えて

1

集約関数の使用

select a.* 
from data a 
left join data b on a.uid = b.uid 
and a.score < b.score 
where b.uid is null 

ずに参加し、左使用して、同じクエリを書き換える別のアプローチは、あなたが必要な場合があります同じスコアが最も高い行がある場合、それは、単一のUIDの複数の行を返すことがありますCASE文とAのいずれかの場合は状況

Demo using MySQL 5.7.12

0

は、私はあなたが次のクエリでモードを無効にすることができますが、

SET sql_mode = 'ONLY_FULL_GROUP_BY'; 
0

を使用することによってのみ、このクエリに対して、このプロパティを変更することをお勧め:また

mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); 

、クエリはのみの最大scoreが表示されますuidですが、該当するものはありませんiddateです。

Select max(score) as score, id, date, uid 
from data 
where (uid,score) in (select uid,max(score) 
         from data 
         group by uid 
        ) 
group by uid 
order by score desc 
+0

期待どおりに動作していますか? –

関連する問題