order by よりも group byの方が先に処理されますが、group byする値をdescしたもの取得する場合はどのようにしたらよいのでしょうか?
select * from t_user as A left join t_statas as b on A.id = B.user_id group by b.user_id order by A.id desc";
この場合はb.user_idが昇順で取得されてしまいますが、降順で取得したいです。
宜しくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
もとのSQLの意図がわかりません。
本来、GROUP BY
をかけた場合は、以下のものしかSELECT
できません。
GROUP BY
した列MAX
、MIN
、SUM
などの集計関数1
のようなリテラル- 上3つから計算した式
MySQLの場合は、これら以外の列を取得することもできますが、それはどれか適当な行の値になってしまいます。
GROUP BY
なのにSELECT *
ということはまさしくこのパターンなので、「どれか適当な行でいい」というのでなければ、各グループについて何を取得するのか、明確に定義が必要です。
投稿2017/05/18 09:43
編集2017/05/18 09:51総合スコア146530
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/18 09:49
2017/05/18 09:52

0
ベストアンサー
SQL文自体がまちがっているのはとりあえずおいておくとして
いずれにしてもt_userとt_statasの仕様次第でしょうね
カラム名から想像するにt_user.idはユニークなidのように思えますが
t_statas.user_id はどうなんでしょう?
1対1なら特に集約する必要もないでしょうけど1対nなら
なんらかの工夫が必要になるでしょう。
またt_user.id∋(∈)t_statas.user_idなのかによっても
いまのSQL文で必要十分なのか微妙です
sample
sample付けときます
- 元データ
SQL
1create table t_user (id int not null primary key,uname varchar(30)); 2insert into t_user values(1,'坂本'),(2,'阿部'),(3,'マギー'); 3create table t_status(id int not null primary key,user_id int,sname varchar(30)); 4insert into t_status values(1,1,'ショート'),(2,2,'キャッチャー'),(3,2,'ファースト'),(4,2,'代打'),(5,3,'サード'),(6,3,'代打'); 5
- 検索
SQL
1select * from t_user as A 2left join t_status as B on A.id=B.user_id 3and B.id in(select max(id) from t_status group by user_id); 4
投稿2017/05/19 01:33
編集2017/05/19 08:37総合スコア117615
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
t_user
とt_status
をJOIN
してselect *
した結果をソートするだけなら、単純にgroup by b.user_id
は不要ではありませんか?
SQL
1select * from t_user as A left join t_statas as b on A.id = B.user_id order by A.id desc
これで期待通りの結果が得られるのでは?
ご参考になれば。
投稿2017/05/18 14:12
総合スコア2425
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。