[過去ログ]
SQL質疑応答スレ 19問目 (982レス)
SQL質疑応答スレ 19問目 http://mevius.5ch.net/test/read.cgi/db/1558610740/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
1: NAME IS NULL [sage] 2019/05/23(木) 20:25:40 ID:??? このスレは 「こういうことをやりたいんだけどSQLでどう書くの?」 「こういうSQLを書いたんだけどうまく動きません><」 などの質問を受け付けるスレです。 SQLという言語はISOによって標準化されていますが この標準を100%実装したDBMSは存在せず、 また、DBMSによっては標準でない独自の構文が 追加されていることもあります。 質問するときはDBMS名を必ず付記してください。 【質問テンプレ】 ・DBMS名とバージョン ・テーブルデータ ・欲しい結果 ・説明 前スレ: SQL質疑応答スレ 18問目 https://mevius.5ch.net/test/read.cgi/db/1515071542/ http://mevius.5ch.net/test/read.cgi/db/1558610740/1
2: NAME IS NULL [sage] 2019/05/23(木) 20:29:13 ID:??? SQL言語リファレンス一覧 Oracle Database https://docs.oracle.com/cd/E96517_01/sqlrf/index.html Microsoft SQL Server https://docs.microsoft.com/ja-jp/sql/t-sql/language-reference IBM DB2 Database https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/c0004100.html PostgreSQL http://www.postgresql.jp/document/current/html/sql.html MySQL https://dev.mysql.com/doc/refman/8.0/en/sql-syntax.html https://dev.mysql.com/doc/refman/5.6/ja/sql-syntax.html 参考リンク http://sql.main.jp/index.html https://www.atmarkit.co.jp/ait/articles/0006/21/news001.html https://oraclesqlpuzzle.ninja-web.net/ https://www.techscore.com/tech/sql/index.html/ http://mevius.5ch.net/test/read.cgi/db/1558610740/2
3: NAME IS NULL [sage] 2019/05/23(木) 20:31:43 ID:??? 過去スレ 18問目:https://mevius.5ch.net/test/read.cgi/db/1515071542/ 17問目:https://mevius.5ch.net/test/read.cgi/db/1468157341/ 16問目:http://echo.2ch.net/test/read.cgi/db/1447160858/ 15問目:http://peace.2ch.net/test/read.cgi/db/1402919549/ 14問目:http://peace.2ch.net/test/read.cgi/db/1371476534/ 13問目:http://toro.2ch.net/test/read.cgi/db/1343899481/ 12問目:http://toro.2ch.net/test/read.cgi/db/1316769778/ 11問目:http://hibari.2ch.net/test/read.cgi/db/1299305530/ 10問目:http://hibari.2ch.net/test/read.cgi/db/1274791771/ 9問目:http://pc11.2ch.net/test/read.cgi/db/1252492296/ 8問目:http://pc11.2ch.net/test/read.cgi/db/1236253554/ 7問目:http://pc11.2ch.net/test/read.cgi/db/1223525474/ 6問目:http://pc11.2ch.net/test/read.cgi/db/1210940477/ 5問目:http://pc11.2ch.net/test/read.cgi/db/1193486961/ 4問目:http://pc11.2ch.net/test/read.cgi/db/1176553195/ 3問目:http://pc11.2ch.net/test/read.cgi/db/1160458216/ 2問目:http://pc8.2ch.net/test/read.cgi/db/1141622643/ 帰ってきた:http://pc8.2ch.net/test/read.cgi/db/1124178925/ Part 2:http://pc8.2ch.net/test/read.cgi/db/1103113155/ 初代:http://pc8.2ch.net/test/read.cgi/db/1056973582/ http://mevius.5ch.net/test/read.cgi/db/1558610740/3
4: NAME IS NULL [sage] 2019/05/23(木) 20:34:29 ID:??? よくある質問1 (問) ID | DATE | DATA --+----------+----- 1 | 2007-11-11 | aaa 2 | 2007-11-11 | bbb 1 | 2007-11-10 | ccc 3 | 2007-11-12 | ddd 3 | 2007-11-11 | eee 4 | 2007-11-10 | fff 1 | 2007-11-12 | ggg このようなテーブルから、下記のように 1 | 2007-11-12 | ggg 3 | 2007-11-12 | ddd 2 | 2007-11-11 | bbb 4 | 2007-11-10 | fff 各idに対して最新の1件だけ抽出するSQLの書き方を教えてください。 (答) select A.ID, A.DATE, A.DATA from TableName A inner join (select ID, max(DATE) as MAX_DATE from TableName group by ID ) B on A.ID = B.ID and A.DATE = B.MAX_DATE ; http://mevius.5ch.net/test/read.cgi/db/1558610740/4
5: NAME IS NULL [sage] 2019/05/23(木) 20:36:39 ID:??? よくある質問2 (問) key data ---------------- 1 a 1 a 1 b 1 b 1 a 2 b 2 a 2 a というテーブルから key a b -------------------- 1 3 2 2 2 1 というExcelのピボットの様なデータを取得したいのですが、どういうSQLになりますか? a,bというのは固定なので、仮にcというデータがあっても無視して構いません。 (答) select key, SUM(CASE data WHEN 'a' THEN 1 END) AS a, SUM(CASE data WHEN 'b' THEN 1 END) AS b FROM table GROUP BY key ORDER BY key ; http://mevius.5ch.net/test/read.cgi/db/1558610740/5
6: NAME IS NULL [sage] 2019/05/23(木) 20:40:07 ID:??? よくある質問3 (問) ID HOGE 01 A 01 B 01 C 02 A 03 B HOGEをAもBもCも持っている、ID:01だけ取り出すにはどうすればよかですか (答1) select id FROM TableName WHERE hoge in ('A','B','C') GROUP BY id HAVING count(DISTINCT hoge) = 3 ; (答2) select * from TableName T1 where not exists (select * from (values 'A', 'B', 'C') T2 (HOGE) where not exists (select * from TableName T3 where T1.ID = T3.ID and T2.HOGE = T3.HOGE ) ) ; ※valuesの部分(Table Value Constructor)はDBMSによって文法がかなり違うので注意 http://mevius.5ch.net/test/read.cgi/db/1558610740/6
7: NAME IS NULL [sage] 2019/05/23(木) 20:41:16 ID:??? よくある質問4 (問) 列の数が可変な問合せはどう書きますか? (答) 標準SQLでは書けません。 pivotという機能を搭載したDBMSなら一見書けそうですが実はやっぱり書けません。 Oracle 11g以降でpivot xmlというキーワードを使用すれば一応可変っぽくはなります。 が、素直にプロシージャを書くかアプリケーションで処理したほうが良いでしょう。 SQL Serverのpivot(2005以降) http://msdn.microsoft.com/ja-jp/library/ms177410.aspx Oracleのpivot(11g以降) http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/statements_10002.htm#CHDCEJJE http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html http://mevius.5ch.net/test/read.cgi/db/1558610740/7
8: NAME IS NULL [sage] 2019/05/23(木) 20:43:39 ID:??? よくある質問5 (問) 年月(YYYYMM)を指定し、その年月に対応する年月日を取得したい 例:201006を指定したら、以下の結果を得たい 20100601 20100602 ・ ・ ・ 20100630 (答) SQLでは存在しないデータを生成することはできません。 この問いの場合は素直にカレンダーテーブルを用意しましょう。 どうしてもやりたければ以下のような方法もなくはないですが、 再帰問合せの本来の使い方ではありません。 やめておくことを強くお奨めします。 (PostgreSQLの連番を生成する関数なら辛うじてセーフかもしれませんが 賛否の分かれるところでしょう。) with TEMP (NUM) as ( select 1 from dual union all select NUM + 1 from TEMP where NUM < 31 ) select to_char(to_date('201006', 'YYYYMM') + NUM - 1, 'YYYYMMDD') from TEMP where to_date('201006', 'YYYYMM') + NUM - 1 < add_months(to_date('201006', 'YYYYMM'), 1) ; ※上記はOracleの場合です。(11gR2以降) ※再帰問合せをサポートするDBMSならこれを適当に改変すれば動きますが どのみちお奨めしません。 http://mevius.5ch.net/test/read.cgi/db/1558610740/8
9: NAME IS NULL [sage] 2019/05/23(木) 20:44:50 ID:??? 以上、テンプレ終わり http://mevius.5ch.net/test/read.cgi/db/1558610740/9
10: NAME IS NULL [] 2019/05/25(土) 01:14:38 ID:1nV7ZQjK 空文字列を入れたがるやつにかぎって、レコードによっては空文字列だったり、NULLだったりと両方想定してないといけない設計にして、運用ではまる。 http://mevius.5ch.net/test/read.cgi/db/1558610740/10
11: NAME IS NULL [sage] 2019/05/25(土) 01:39:12 ID:??? 苦労しているんだね 同情します http://mevius.5ch.net/test/read.cgi/db/1558610740/11
12: NAME IS NULL [] 2019/05/25(土) 06:44:36 ID:LBGwosS9 SQLじゃなくてテーブル設計の質問なんですが、お願いします。 商品を複数の倉庫に保管するモデリングなんですが、現状は、 ---------------------------------------------------------------- pkey | 商品ID | 商品名 | 倉庫1 | 倉庫2 | 倉庫3 | 倉庫4 | 倉庫5 | ---------------------------------------------------------------- という風になって、保管する場所が増えるたびに、倉庫カラムが増える設計になっています。 これは、 ------------------------- pkey | 商品ID | 倉庫番号 | ------------------------- | | 倉庫1 | ------------------------- | | 倉庫2 | ------------------------- | | 倉庫3 | ------------------------- | | 倉庫4 | ------------------------- | | 倉庫5 | ------------------------- という風にするべきなのでしょうか? 最初の設計だとカラムが増えていくのに対して、この方法だとレコードがとんでもない数になっていくのですが・・・・ http://mevius.5ch.net/test/read.cgi/db/1558610740/12
13: NAME IS NULL [sage] 2019/05/25(土) 07:25:57 ID:??? 毎回思うけどレコード増えてなにが困るん? http://mevius.5ch.net/test/read.cgi/db/1558610740/13
14: NAME IS NULL [sage] 2019/05/25(土) 07:54:17 ID:??? >>13 ?もともと1レコードに収まっていたデータを多数のレコードに分割すると、読み取りのパフォーマンスは落ちないでしょうか? ?副作用ですが、正規化することで、正規化前と比べてテーブル数が増える(20倍程度)と、結合で速度が落ちないか? という点が不安です。 http://mevius.5ch.net/test/read.cgi/db/1558610740/14
15: NAME IS NULL [sage] 2019/05/25(土) 08:54:05 ID:??? >>12 倉庫が増えたら項目増やさないといけなくなるのと 倉庫ごとに数量、単価、金額もちたくなるとさらに項目が増える もとのデータは下のテーブル形式で、夜間処理で照会用の中間テーブルとして上のテーブルをつくればいい http://mevius.5ch.net/test/read.cgi/db/1558610740/15
16: NAME IS NULL [sage] 2019/05/25(土) 10:08:56 ID:??? >>15 おっしゃる通りです。経験のなさから、そこまで考えが及びませんでした。 まずは第三正規形に正規化した状態でのパフォーマンス確認からしてみます。 http://mevius.5ch.net/test/read.cgi/db/1558610740/16
17: NAME IS NULL [sage] 2019/05/25(土) 11:34:00 ID:??? >>12 その商品、特定倉庫1ヶ所にしまうのかい? http://mevius.5ch.net/test/read.cgi/db/1558610740/17
18: NAME IS NULL [sage] 2019/05/25(土) 11:45:54 ID:??? SQL質疑スレでやるよりも、こちらでした方が良いかも DB設計を語るスレ 10 https://mevius.5ch.net/test/read.cgi/db/1495438711/ 答える人は同じなんだろうけどね http://mevius.5ch.net/test/read.cgi/db/1558610740/18
19: NAME IS NULL [] 2019/05/25(土) 13:46:20 ID:Z+RZPCej 縦横問題はRDBができて以来定番の課題&質問になってるな PIVOTとかも使いにくいしいい加減DBMS側でうまいことしてほしいところ http://mevius.5ch.net/test/read.cgi/db/1558610740/19
20: NAME IS NULL [sage] 2019/05/26(日) 00:42:51 ID:??? 今なら 「ラクテンスーパーポイントスクリーン」 登録するだけでRポイント150pが貰える! ※Androidアプリのみ iPhoneユーザーはWeb版から登録のみ可能 登録完了後に表示される招待コ一ドをお持ちですか?のところで 「i9WPjs」 を入力する 完了 祭りだ♪ヽ('∀')メ('∀')メ('∀')ノワッショイ http://mevius.5ch.net/test/read.cgi/db/1558610740/20
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 962 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.292s*