質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

1回答

16949閲覧

DISTINCTとORDER BYが共存できない件

geikusoo

総合スコア8

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2020/03/10 10:55

下記SQL文で出てきたレコードを、staffの名前の五十音順ソートがしたいです。

SELECT DISTINCT schedules.staff_id, staff.name FROM schedules LEFT JOIN staff ON schedules.staff_id = staff.id

末尾に「ORDER BY staff.name_kana ASC」と追加するだけで住むかと思いきや、
エラー出て実行できませんでした。
切り口を変えて、まずstaff.name_kanaを取得してから、プログラムの方でソートスレば良いかなと思いましたがそれもだめでした。(↓もエラー)

SELECT DISTINCT ON( schedules.staff_id, staff.name)* FROM schedules LEFT JOIN staff ON schedules.staff_id = staff.id

LEFT JOINで取得したデータをソートするにはどうしたら良いでしょうか??

ご教示の程よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/03/10 10:59

どのようなエラーが出ましたか?
yureighost

2020/03/10 11:03

GROUP BYは使えませんかね?
guest

回答1

0

表示外のものでorder by しようとするからじゃないでしょうか?

SELECT DISTINCT
schedules.staff_id,
staff.name,
staff.name_kana
FROM
schedules
LEFT JOIN staff ON schedules.staff_id = staff.id
order by staff.name_kana ASC

投稿2020/03/10 11:54

yambejp

総合スコア114784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

geikusoo

2020/03/11 02:46

staff.name_kanaは重複しうるのでその記述ではだめですね
yambejp

2020/03/11 02:48

条件とサンプルが足りない 重複するというのはどういう状態なのか? その場合どのデータをどう表示したいのか?記載してください そもそも重複すると想定しているならソートのキーにできるわけがないと 気がついてほしいところ
yambejp

2020/03/11 03:37

たとえば・・・ create table t1(id int primary key,val int); insert into t1 values(1,100),(2,200),(3,300); create table t2(id int,name varchar(10),kana varchar(100)); insert into t2 values(1,'aaa','yyy'),(1,'bbb','www'),(1,'bbb','zzz'),(3,'ccc','xxx'),(4,'ddd','');
yambejp

2020/03/11 03:37

select t1.id, t2.name FROM t1 LEFT JOIN t2 ON t1.id = t2.id group by id,name order by min(kana) ASC select t1.id, t2.name FROM t1 LEFT JOIN t2 ON t1.id = t2.id group by id,name order by max(kana) ASC
yambejp

2020/03/11 03:38

kanaが複数存在する可能性があるならkanaの中のどれを利用してソートするか 指定をする必要があるということ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問