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

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

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

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

Q&A

2回答

1461閲覧

【mysql】ひとつのSELECT文で、ひとつのカラムの昇順、降順、条件付きの結果を出力したい

celeca

総合スコア8

MySQL

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

0グッド

0クリップ

投稿2015/11/14 09:45

このようなテーブルがあるとします。

+-----+------+
| seq | age |
+-----+------+
| 1 | 10 |
| 2 | 30 |
| 3 | 20 |
| 4 | 30 |
+-----+------+

抽出したいのはseqだけなのですが、
seqの昇順」
seqの降順」
ageの昇順(かつseqの昇順`)」

の結果をひとまとめにしたいのですが、これは可能でしょうか?
つまり、

+-------+-------+-------+
| seq_1 | seq_2 | seq_3 |
+-------+-------+-------+
| 1 | 4 | 1 |
| 2 | 3 | 3 |
| 3 | 2 | 2 |
| 4 | 1 | 4 |
+-------+-------+-------+

このような表示をひとつのselect文で表すことはできますでしょうか?

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

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

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

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

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

guest

回答2

0

http://m97087yh.seesaa.net/article/109049904.html
http://blog.engineer.adways.net/archives/43251612.html

やってやれなくはないですが、複雑ですし遅いですよ?

SQL

1SELECT 2 a.seq as seq_1, -- 「seqの昇順」 3 b.seq as seq_2, -- 「seqの降順」 4 c.seq as seq_3 -- 「ageの昇順(かつseqの昇順)」 5FROM ( 6 SELECT @i:=@i+1 as id, seq 7 FROM (select @i:=0) as dummy,table 8 ORDER BY seq DESC 9 ) as a LEFT JOIN ( 10 SELECT @j:=@j+1 as id, seq 11 FROM (select @j:=0) as dummy,table 12 ORDER BY seq ASC 13 ) as b ON a.id = b.id LEFT JOIN ( 14 SELECT @k:=@k+1 as id, seq 15 FROM (select @k:=0) as dummy,table 16 ORDER BY age ASC, seq DESC 17 ) as c ON a.id = c.id

動作するかは未検証です、確認してみてください。

投稿2015/11/14 10:45

編集2015/11/14 13:47
miyabi-sun

総合スコア21158

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

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

0

SQLの回答としては、miyabi-sunさんと、基本同じになりますので、割愛します。

miyabi-sunさん回答の補足となります。

特に、My SQLの場合、oracleの様に、行番号取得(ROWNUM 擬似列)がない為、
miyabi-sunさんが回答されている様に、
仮想テーブルに行番号を無理やりつけて(@i:=~)、左結合(LEFT JOIN)してと、
SQLが複雑難解となり、件数が増えれば増える程、動作もあり得ない程、遅くなります。

そもそも、RDB(Relational Database)で実現させるべきことではなく、
それぞれのSQLで取得した値を、表示する際に、
プログラム側で、くっつけた方が余程簡単ですし、高速です。

投稿2015/11/15 16:19

編集2015/11/15 16:20
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問