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

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

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

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

Q&A

解決済

4回答

9840閲覧

SQL文で、ある列から1つだけデータを取得する

退会済みユーザー

退会済みユーザー

総合スコア0

SQL

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

1グッド

0クリップ

投稿2017/06/26 02:09

編集2017/06/26 02:28

MySQLで下記画像のようなテーブルがあるとします。

イメージ説明

この中から例えばお金の列の5行目のデータを取得する場合ですが
色々調べた結果、行の指定がわかりません。

SELECT お金 FROM テーブル1 5行目;

お暇な方教えてください(笑)

A-pZ👍を押しています

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

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

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

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

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

mattn

2017/06/26 02:13

どのRDBMSか指定して下さい。
mattn

2017/06/26 02:14

また並べ替えの条件指定が無いと順番は変わります
ttyp03

2017/06/26 02:17

最終行は5行目ではないと思われますが、質問文を正しくしてください。
退会済みユーザー

退会済みユーザー

2017/06/26 02:25

mattnさん、RDBMSはMySQLになります。並べ替えの条件指定が必要という事なので、ちょっと頑張って調べてみます。
退会済みユーザー

退会済みユーザー

2017/06/26 02:26

ttyp03さん、最終行ではなく、行の指定がわからないという意味になります。
guest

回答4

0

先頭から5番目となると、何らかの項目の値を大きい順、または小さい順に並べて、5番目を指定されると思います。RDBにはそれぞれ行番号を振る、または行指定するSQL文が有りますので、ORDER BYで並べて、5行目を指定する事ができます。
MySqlの例ですが

sql

1SELECT `いちご`,`きゅうり`,`お金`,`人間` 2FROM ( 3 SELECT 4 @i:=@i+1 AS ROWNUM 5 ,T1.* 6 FROM 7 (SELECT @i:=0) AS INDEX_NUM 8 , `テーブル1` AS T1 9 ORDER BY T1.`いちご`) AS T2 10WHERE ROWNUM=5 11;

ちなみに暇です。

投稿2017/06/26 04:03

編集2017/06/26 05:13
A.Ichi

総合スコア4070

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

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

yambejp

2017/06/26 04:09

暇だったんですね(笑) むしろあの記述は回答者を暇人扱いするなと怒るところかと思ってました
退会済みユーザー

退会済みユーザー

2017/06/26 05:25

回答ありがとうございます。 やってみたんですが、ちょっと難しい結果になってしまいました。 そんな複雑なSQL文があるという事も勉強になりました。ありがとうございました。
guest

0

ベストアンサー

複数行を問い合わせた際に、5行目である事を指定する方法が各 RDBMS で異なります。
また質問に並べ替えの指定 (order by) がありませんので結果が変わってしまいます。

例えばこのテーブルに ID というカラムが付いていてそれで並べ替えた際の5行目という条件であれば以下の様になります。

sql

1select お金 from テーブル1 where rowid == 5 order by id;

これは SQLite の場合です。SQLite でない場合、rownum であったり generate_series であったり対応が異なります。

追記

MySQL の回答を書きます。

sql

1select お金 from テーブル1 order by ID desc limit 4,1

IDというカラムが付いていていた場合の回答です。

投稿2017/06/26 02:16

編集2017/06/26 02:32
mattn

総合スコア5030

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

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

退会済みユーザー

退会済みユーザー

2017/06/26 02:29

ありがとうございます。idというカラムが無いと指定できないでしょうか?
mattn

2017/06/26 02:33

並べ替えの条件が無いと場合によっては結果が異なります。並べ替え条件が、いちごなのであればそれでもいいですが、きっと違いますよね。入れた順が並べ替え順です、という場合であってもその入れた順をどこかに持たないといけません。
mattn

2017/06/26 02:38

何を言っているのかというと、5行目と指定して出てくる結果は 010010 さんと別の人では違ってくるという事です。どう並べた際の5行目なのかを指定しないといけません。
退会済みユーザー

退会済みユーザー

2017/06/26 02:42

無知で申し訳ありません。 mattnさんの回答を元に頑張ってみます。
mattn

2017/06/26 02:44

いえ、質問サイトに書いているのですから謝るのは無しです。頑張りましょう。
退会済みユーザー

退会済みユーザー

2017/06/26 05:22

無事解決できました。ありがとうございました。 idのcolumnを追加してやる事にしました。LIMITの指定など慣れないと困惑しますね。
mattn

2017/06/26 05:52

LIMIT 指定、RDB により指定方法(引数を2つ取らない)が違うのでそこも要注意です。
guest

0

RDBにおいてレコードとレコードの間には前後関係という考え方がありません
従って必ずorder byでなんらかの並べ替えをしないとn番目という
順番をつかった抜き出しはできません。

逆に言うと、適当に取り出したデータは何がでてくるかわからないということ
何がでてくるかわからないデータの5番目をとるということは
1番目をとっても同じことですので、ordery byをしない場合の5番目をとると
言う行為自体が意味が無いということになります

投稿2017/06/26 03:01

yambejp

総合スコア114883

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

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

退会済みユーザー

退会済みユーザー

2017/06/26 05:24

>RDBにおいてレコードとレコードの間には前後関係という考え方がありません エクセルみたいに考えていたので勉強になりました。
guest

0

降順の場合
SELECT お金 FROM テーブル1 order by id desc limit 1,1

投稿2017/06/26 05:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問