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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

16020閲覧

サブクエリを使用して0から連番を生成したい

kurimoto

総合スコア13

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/10/06 07:28

編集2017/10/06 11:40

サブクエリ等を使用して0から始まる連番を生成したいのですが、どうやって良いのか分かりません...

内容
テーブル名 hoge

idnamecategory
0A1
1B2
2C2
3D3
4E2
5F2
6G1

と、あるとしたら

SQL

1SELECT name,category,(サブクエリ) AS 連番 FROM hoge WHERE category= 2

みたいな感じで

namecategory連番
B20
C21
E22
F23

といった感じでやりたいのですが可能でしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

hogeのidがユニークで、連番はid順でよいならこんな感じです

SQL

1SELECT name,category,(select count(*) from hoge as t2 where t2.id<t1.id and t2.category=2) AS 連番 2from hoge as t1 WHERE category= 2

mysqlあたりだと変数をひたすら回していくことでもいけます

SQL

1SELECT name,category, (select @a:=@a+1 from (select @a:=-1) as dummy) AS 連番 2from hoge WHERE category= 2 order by id

投稿2017/10/06 08:11

yambejp

総合スコア114572

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

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

退会済みユーザー

退会済みユーザー

2018/09/16 22:30

幸運にも期待通りの結果を得られるかもしれませんが、それが確約されないSQLで、 論外の品質なので、マイナス投票します。 http://download.nust.na/pub6/mysql/doc/refman/5.1/ja/user-variables.html >基本的なルールは、ステートメントの一部でユーザ変数値を割り当てないこと >および同一ステートメント内の他部分で同じ変数を使用しないことです。 >期待通りの結果を得られるかもしれませんが、これは確約されていません。
yambejp

2018/09/18 00:56

これって同一ステートメントから同じ変数を参照していることになります?
mysql_help

2018/11/17 07:08

退会済ユーザ様 減点するなら下記の2点がより適切です。 https://dev.mysql.com/doc/refman/5.6/ja/user-variables.html >SET ステートメント以外では、同じステートメント内で、 >ユーザー変数に値を割り当ててその値を読み取ることは決してしないでください。 という記載に反して、割り当てた値を、読み取っていることが1点目。 select文の結果が10行なら、同じユーザ変数への10回以上の読取と割当を行ってます。 select文でのユーザ変数への値の代入は5.7で非推奨になり、8.0以降で削除予定の機能であることが2点目。 http://www.mysql.gr.jp/mysqlml/mysql/msg/16488
guest

0

SELECT name,category,(サブクエリ) AS 連番 WHERE category= 2

FROM hogeが無いですよというのは置いておいて。

ORDER BY句が無いので順不同ということであれば、Oracleの場合、

SQL

1SELECT name,category,ROWNUM - 1 AS 連番 FROM hoge WHERE category= 2

投稿2017/10/06 07:51

編集2017/10/06 07:52
workaholist

総合スコア559

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問