X



トップページDB@2ch掲示板
1002コメント330KB
SQL質疑応答スレ 17問目 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
0001NAME IS NULL
垢版 |
2016/07/10(日) 22:29:01.40ID:???
このスレは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
などの質問を受け付けるスレです。

SQLという言語はISOによって標準化されていますが
この標準を100%実装したDBMSは存在せず、
また、DBMSによっては標準でない独自の構文が
追加されていることもあります。

質問するときはDBMS名を必ず付記してください。

【質問テンプレ】
・DBMS名とバージョン
・テーブルデータ
・欲しい結果
・説明

前スレ:
SQL質疑応答スレ 16問目
http://echo.2ch.net/test/read.cgi/db/1447160858/
0920NAME IS NULL
垢版 |
2017/11/06(月) 13:28:19.94ID:OvWu3ceL
>>919
グループ化したものを並び替えることはできる。

並び替えたものをグループ化しても意味がない。
0921NAME IS NULL
垢版 |
2017/11/06(月) 14:14:19.44ID:???
>>920
へえー
じゃあグループ化してないカラムを並び替えすることは出来る?
0922NAME IS NULL
垢版 |
2017/11/06(月) 14:16:34.60ID:OvWu3ceL
暇人だなw
0923NAME IS NULL
垢版 |
2017/11/06(月) 21:49:11.63ID:m9a7sHg6
笑ってごまかすんじゃない最後まで答えろ
0924NAME IS NULL
垢版 |
2017/11/06(月) 22:13:08.96ID:nRwHbJxK
変なのがずっと居座っていたのか。
0925NAME IS NULL
垢版 |
2017/11/06(月) 22:36:12.91ID:fjeBNiC4
>>923
俺のスキルじゃ無理
0926NAME IS NULL
垢版 |
2017/11/06(月) 23:11:44.01ID:m9a7sHg6
>>925
いやお前なら出来るはずだ
0927NAME IS NULL
垢版 |
2017/11/12(日) 08:40:38.51ID:???
SQLってcasesensitivitieじゃないんですよね?コマンドを小文字で書いても良いですか?
いちいちcapslock雄の面倒
0928NAME IS NULL
垢版 |
2017/11/12(日) 08:58:26.16ID:???
SQLって英単語の羅列で構造がぱっと見わかりにくいから、昔は予約語だけ大文字にするとかあったけど、
最近はエディタでハイライト(色分け)できるのが普通だから全部小文字でも全然問題ないな。
0929NAME IS NULL
垢版 |
2017/11/12(日) 09:13:40.39ID:???
小文字でも普通にオッケーなんですか

sqlite のクエリを書くのにpythonのIDE使ってるんでsintax highlightは効かないので見にくいかもしれない
一長一短すね
0930NAME IS NULL
垢版 |
2017/11/12(日) 11:08:21.18ID:???
使ったことあるのは oracle, SQL-Server, PostgreSQL, sqlite3, MySQL だけだけど、全部小文字でも問題なかったな
0931NAME IS NULL
垢版 |
2017/11/12(日) 13:00:50.96ID:bx2ZtZM+
>>929
初心者?
0932NAME IS NULL
垢版 |
2017/11/12(日) 13:04:49.71ID:???
一行に詰め込もうとかしなければ小文字でも読めるやろ
0933NAME IS NULL
垢版 |
2017/11/12(日) 14:09:18.93ID:???
英文(って言うかアルファベット)の大文字の綴りなんて、まず読みにくいだろ?
0934NAME IS NULL
垢版 |
2017/11/12(日) 14:14:09.39ID:???
大昔はコンソールから大文字しか打てなかった時代があった
0935NAME IS NULL
垢版 |
2017/11/12(日) 15:15:24.45ID:???
コボラーは今でも大文字なんだっけ
0936NAME IS NULL
垢版 |
2017/11/12(日) 15:30:51.57ID:???
COBOLも小文字
というかcase insensitiveやで
0937NAME IS NULL
垢版 |
2017/11/12(日) 15:32:09.97ID:???
COBOLは今は大文字小文字混じりだよ
FORTRANもね

SQLは特定の場所以外大文字小文字関係ない
内部では処理系によって大文字か小文字に変換して処理する
0938NAME IS NULL
垢版 |
2017/11/13(月) 20:56:12.44ID:YzugWzEj
板違いかもしれませんが、hirdb詳しい方いませんか?いたらhirdbのストアドが使い易いか教えて下さい。使ってるのみたことなくて…
0939NAME IS NULL
垢版 |
2017/11/13(月) 21:07:17.01ID:???
うっわかわいそうに
0940NAME IS NULL
垢版 |
2017/11/13(月) 21:08:07.96ID:Vp0kKm4r
>>938
ネットに公表されているマニュアルを見たのか?
ストアドは標準SQLだから標準SQLとかけ離れていることはない。
0941NAME IS NULL
垢版 |
2017/11/13(月) 21:23:35.97ID:vPFZRtjc
>>940
みました。標準的にみえるけど、あまり使われてないDBMSだから落とし穴がないかこわくて。そもそも自分がそんなにストアド使ったことないから判断しかねるのもあります。
それと、過去ログにはトリガー設定して自動で動くようにはできない??との記述もあって…
0942NAME IS NULL
垢版 |
2017/11/15(水) 03:09:42.05ID:0j2E8Ny1
sForm
0943NAME IS NULL
垢版 |
2017/12/12(火) 12:03:27.68ID:Gxq3LHR7
名前 年齢 住所の他にその人がどういう人なのか0個から複数の属性を持たせたいのですが
配列にするってのはデータベース的によくないんですよね?
そこは属性テーブルを別個作って
さらに属性と個人テーブルを関連付けさせるための関連付けテーブルを用意すればいいのでしょうか?

個人テーブル
 ID 1
 名前 山田太郎
 年齢 38
 住所 東京都

属性テーブル
 ID 1
 属性名 会社社長

関連テーブル
 ID 1
 個人ID 1
 属性ID 1

こんな感じですか?あと関連テーブルの個人IDと属性IDは外部キーでいいのでしょうか?
0944NAME IS NULL
垢版 |
2017/12/12(火) 14:35:32.23ID:???
変な感じɿ(。・ɜ・)ɾ
0945NAME IS NULL
垢版 |
2017/12/12(火) 16:13:02.05ID:???
1:nなら属性テーブルが直接個人IDもってても良いんじゃね
0946943
垢版 |
2017/12/12(火) 16:41:00.78ID:Gxq3LHR7
>>945
レスありがとうございます
なるほど
この情報が社内情報のようなものならそれでよさそうですね
実際はn:nの情報になります
外部キーはよくわからないのですが参照のようなもので
deleteされて整合性がとれなくなりそうなときにうまく解決してくれるようなものなのかなと
(子テーブルで親の参照がなくなることを警告出したり、整合性とるために削除したり?)
もうちょっと勉強してきます
0947NAME IS NULL
垢版 |
2017/12/12(火) 17:31:43.57ID:???
Googleのアドレス帳なんかは任意の項目が入力できるから
>>943みたいになってるんじゃないかな
0948NAME IS NULL
垢版 |
2017/12/12(火) 20:18:55.95ID:2NJ8QzBR
ほとんどの場合任意の属性を記録するのはシリアライズしたテキストで十分なんやで
オーバーエンジニアリングにならんように気いつけや
0949NAME IS NULL
垢版 |
2017/12/13(水) 10:32:20.73ID:???
NOSQLとかならわかるけどシリアライズしたテキストをRDBで使ったら負けかなと思ってる
0950NAME IS NULL
垢版 |
2017/12/13(水) 19:59:22.88ID:Gzldjtnr
逆だわwスキーマレスなNOSQLならなんぼでもオレオレ属性持てるやんw
0951NAME IS NULL
垢版 |
2017/12/14(木) 10:22:47.63ID:???
おまけみたいな項目だけテキストで持つとかでもええやん
ゼロイチ思考は損よ
0952NAME IS NULL
垢版 |
2017/12/14(木) 10:43:19.73ID:???
>>950
シリアライズしたテキストなんて曖昧なデータぶっこむのもOKだけど
RDB使ってんなら関係性重視したいよねっていう
0953NAME IS NULL
垢版 |
2017/12/14(木) 18:55:46.58ID:W31f7YBM
>>952
お前がやりたいなら止めはしないけどお前が重視したいらしい関係性て
おそらく関係モデルの関係とはなんも関係ない関係性やでw
0954NAME IS NULL
垢版 |
2017/12/15(金) 01:27:41.00ID:???
RDBじゃないDBMSの選択肢が極端に少ないって実情があるからな
0955NAME IS NULL
垢版 |
2017/12/15(金) 02:37:31.20ID:???
>おそらく関係モデルの関係とはなんも関係ない関係性やでw
それはない
正規化から勉強しなおしだな
0956NAME IS NULL
垢版 |
2017/12/15(金) 07:47:26.78ID:6QrkU8mN
>>955
いやあるからわざわざ言っとんのやでw
意固地のベイビーちゃんやなw
0957NAME IS NULL
垢版 |
2017/12/15(金) 12:49:28.67ID:???
>>955
要件もはっきりしてないのに
> それはない
って言い切る奴はバカ認定してもいいかな?
0958NAME IS NULL
垢版 |
2017/12/15(金) 15:11:25.84ID:???
しょせん他人事でどうでもいいことに熱くなるなよ
0959NAME IS NULL
垢版 |
2017/12/15(金) 16:58:53.39ID:???
奇をてらわずに>>943でいいじゃんな
スループット確保したいとか入力値が無法地帯でモデリングしようがないとか
そういう時に初めて検討すりゃいい
0961NAME IS NULL
垢版 |
2017/12/15(金) 17:18:42.86ID:???
KVS
 ID 1
 VALUE {
  "name": "山田太郎",
  "age": "35",
  "addr": "東京都",
  "attr": [
   
  ]
 }

これじゃRDBの意味がない
0962NAME IS NULL
垢版 |
2017/12/15(金) 17:21:46.72ID:???
KVS
 ID: 1
 VALUE: "山田太郎"
 ID: 2
 VALUE: "35"
 ID: 3
 VALUE: "東京都"

にすると扱うのが却って難しい
0963NAME IS NULL
垢版 |
2017/12/15(金) 21:41:32.93ID:???
>>960
えっ?
どこがブーメランなんだい?
ちょっと説明してみ
0964NAME IS NULL
垢版 |
2017/12/25(月) 08:23:47.10ID:Xetk2Fg1
MariaDB(MySQL)で質問です
Userテーブルがあり、各ユーザーはpointというint型のフィールドがあります
このpointの合計がx以上になる分だけのユーザーをソートして取得したいと考えています

色々と調べたり試行錯誤してみましたが限界を感じましたので
どうか皆様の知恵をおかしください。よろしくお願いします
0965NAME IS NULL
垢版 |
2017/12/25(月) 11:11:43.13ID:???
pointの合計ってなに?なんか計算をしたいの?

・Userテーブルがある
・各ユーザーはpointというフィールドを持つ

ちゃんとテーブルの構成を書かないとこれだけじゃよくわからない
0966NAME IS NULL
垢版 |
2017/12/25(月) 16:20:46.40ID:???
ユーザーIDでgroup by し sumでpointを集計
order by ユーザーID
んでhavingで sum(point) > x
みたいな?
0967NAME IS NULL
垢版 |
2017/12/25(月) 17:50:53.80ID:Xetk2Fg1
>>966
試してみます!
0968NAME IS NULL
垢版 |
2017/12/29(金) 11:02:39.55ID:dtNZwIie
誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。

グーグル検索⇒『宮本のゴウリエセレレ』

J7FO55UASR
0969NAME IS NULL
垢版 |
2017/12/29(金) 17:11:12.15ID:???
>>968
でも、君あちこちにコピペしてて苦労してそうじゃん
もっと簡単に稼げるぞ
0970NAME IS NULL
垢版 |
2017/12/31(日) 07:10:08.80ID:???
where 句のIN演算子の書き方ってモヤっとしない?
0971NAME IS NULL
垢版 |
2018/01/01(月) 15:34:27.49ID:???
ID / 日付 / 値

という列があったとして(ID/日付でUNIQUE)、それぞれの各行に
「IDごとの前回の日付から遡って1年間の間に値が最大値となる日付」を付与するにはどうしたらいいでしょう?

A | 16-01-01 | 10
A | 16-11-01 | 20
A | 17-02-01 | 15
A | 17-12-01 | 10
A | 18-01-01 | 30
B | 17-03-01 | 15
B | 17-10-01 | 10
B | 17-11-01 | 20

とあったら、上からNULL、16-01-01、16-11-01、16-11-01、17-02-01、NULL、17-03-01、17-03-01が入るような列を追加するイメージです
Postgres使ってます
0972NAME IS NULL
垢版 |
2018/01/01(月) 15:57:02.83ID:???
>>971
>前回の日付から遡って1年間の間

頭悪くて済まないが、この意味がよく分からない
0973NAME IS NULL
垢版 |
2018/01/01(月) 16:20:06.66ID:???
>>972
言葉足らずでごめん
日付でソートした際の1つ前のレコードから遡って1年間

A | 16-01-01 | 10
A | 16-11-01 | 20

これだと、1行目はこの前の時点のデータがないからNULLで、
2行目のは1つ前のレコードである16-01-01から遡って1年間を集計期間にしたい
0974NAME IS NULL
垢版 |
2018/01/01(月) 21:04:00.89ID:iMl2Nb4o
いきなり最終形にしようとするからわからないんだろうな。
0975NAME IS NULL
垢版 |
2018/01/01(月) 21:30:53.28ID:???
少しずつ実現するのが近道部品を組み立てる組み立てるつもりで考えてみよう
0976971
垢版 |
2018/01/01(月) 22:29:55.07ID:???
SQLポンコツなんだ…
せめてヒントをくれるとありがたいです
0977NAME IS NULL
垢版 |
2018/01/01(月) 22:36:14.85ID:g9MeygUN
ID列でグループ化、日付列がcountで2レコード以上のレコードを取得して、日付が最小のレコードを取得する。

あなたのためにあえてSQLは書かない。
0978NAME IS NULL
垢版 |
2018/01/01(月) 23:05:35.41ID:???
>>971
sqlserverならこんな感じでできる
select * from (
select m.id ,m.日付,m.値,s.日付 as 最大値日付,row_number (partation by m.id,m.日付 order by m.値 desc) as 順
from テーブル as m
left join テーブル as s
on s.id = m.id
and s.日付 between deteadd (yy,-1,m.日付) and m.日付
) as mm
where 順 = 1
0979NAME IS NULL
垢版 |
2018/01/01(月) 23:08:58.34ID:g9MeygUN
ひどい例
0980NAME IS NULL
垢版 |
2018/01/02(火) 02:01:15.52ID:???
>>971
select *,
(select top 1 日付 from テーブル where テーブル.ID=前回の日付テーブル.id and テーブル.日付 <= 前回の日付テーブル.前回の日付 and テーブル.日付>DATEADD(yy,-1,前回の日付テーブル.前回の日付) order by 値 desc)
from(
select t.*,
(select top 1 日付 from テーブル where テーブル.ID=t.id and テーブル.日付 < t.日付 order by 日付 desc) as 前回の日付
from テーブル as t
) as 前回の日付テーブル

SQL Serverでやったけど、topと日付計算周りだけ直せば動くんじゃね
パーティション関数とかつかえるなら違う書き方もできるけど
>>978はtypo別にしてもいろいろ残念
0981NAME IS NULL
垢版 |
2018/01/02(火) 10:42:11.51ID:???
>>980
サブクエリにorder by使えないと思う
オラクルは使えるみたいだけど
0982NAME IS NULL
垢版 |
2018/01/02(火) 11:12:27.53ID:???
>>981
すいませんtop があればサブクエリでorderby 使える事知らなかった
0983NAME IS NULL
垢版 |
2018/01/02(火) 11:16:49.66ID:???
>>981
> サブクエリにorder by使えないと思う
SQL-Server 2005以降ならtopを指定してたら使える
0984NAME IS NULL
垢版 |
2018/01/02(火) 11:29:49.96ID:???
出来れば ostgres をベースに回答してやろうよ
0985971
垢版 |
2018/01/02(火) 15:04:26.15ID:???
みなさまありがとうございます
相関サブクエリ?で値でソートしたあとの最初のレコードを取ってくれば良いんですね
チャレンジしてみます
0986NAME IS NULL
垢版 |
2018/01/02(火) 16:06:45.83ID:???
>出来れば ostgres をベースに回答してやろうよ

Postgres ?
なんでPostgresなのかね

テンプレに
【質問テンプレ】
・DBMS名とバージョン
ってあるのにそれを書かない質問者の不手際だろ
0988NAME IS NULL
垢版 |
2018/01/02(火) 16:11:42.06ID:???
>>986
971にpostgresって書いてあるけど、 オストグレスは知らんが
0989NAME IS NULL
垢版 |
2018/01/02(火) 16:13:16.36ID:???
テンプレ通りではないが、
>>971の最後の行に
>Postgres使ってます
こうあるので
0991NAME IS NULL
垢版 |
2018/01/03(水) 10:35:26.64ID:X70UaZKX
>>980 みたいなのを真に受けるなよ
0992NAME IS NULL
垢版 |
2018/01/03(水) 22:50:26.68ID:???
具体的な問題点を指摘できんなら黙っとけや
0993NAME IS NULL
垢版 |
2018/01/04(木) 12:53:23.31ID:49+pCNSV
>>992
select
from (select
group by
having count(*) > 1)
where
0994NAME IS NULL
垢版 |
2018/01/04(木) 15:47:10.27ID:???
>>993
何が言いたいのかわからない
>>980はすくなくともSQL Serverなら正しく動いた
DBMSによってはサブクエリのorder byとtop(limit)が効かないかもしれんが
ポスグレがそうならそう指摘して正しく動くSQL示せば良い話
0995NAME IS NULL
垢版 |
2018/01/04(木) 16:07:09.61ID:49+pCNSV
なんでそんなクソSQLをごり押ししたいのか?
0996NAME IS NULL
垢版 |
2018/01/04(木) 18:43:28.68ID:F4EONRA7
>>992
select
from (select id, min(日付)
from テーブル
group by id
having count(*) > 1)
where
0997NAME IS NULL
垢版 |
2018/01/04(木) 19:01:47.94ID:???
お前要件取り違えてるだろ
0998NAME IS NULL
垢版 |
2018/01/04(木) 20:10:33.27ID:F4EONRA7
日付から考えるからおかしくなる。

これがプログラムならそういう順序では考えない。

質問者の「ソート」という言葉に惑わされてるんだろうな。
0999NAME IS NULL
垢版 |
2018/01/04(木) 20:16:13.07ID:F4EONRA7
正確にはIDでグループ化した日付のMAXと、IDでグループ化したcountの結果の比較だけど、初めから答え書く気はない。
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 542日 22時間 52分 44秒
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況