SQL質疑応答スレ 17問目 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
このスレは 「こういうことをやりたいんだけどSQLでどう書くの?」 「こういうSQLを書いたんだけどうまく動きません><」 などの質問を受け付けるスレです。 SQLという言語はISOによって標準化されていますが この標準を100%実装したDBMSは存在せず、 また、DBMSによっては標準でない独自の構文が 追加されていることもあります。 質問するときはDBMS名を必ず付記してください。 【質問テンプレ】 ・DBMS名とバージョン ・テーブルデータ ・欲しい結果 ・説明 前スレ: SQL質疑応答スレ 16問目 http://echo.2ch.net/test/read.cgi/db/1447160858/ どの話をしようとしているのか分からん 4ヶ月引いて1日足すというだけでも 30日に1日足したら31日になるのか1日になるのかどう判断するんだ? >>363 ほんとだ なんで足す1出てきたし4なんですかね なんにせよありがとう 例えば、左から右に行って、 途中でジェイってなって、そのまま終わったらいいかと思うんですが。 新しいSQLの概念というか。 間違えた。 >>386 じゃなく>>366 だった^^; >>372 月末の次の日が1日じゃないケースってなに? >>371 の言う「翌月の1日前」が「翌月の1日の1日前」という意味なら、ってことだろ。 おまえ、そんな頭のレベルでよくSQL云々出来るなぁ IPAの試験が、読解力を試されるような問題だらけになるわけだ。 複数の同一形式のcsvからデータを読み取る時、普通は↓こんな風に定義するけど、 [001.csv] [002.csv] [003.csv] Col1=F1 Char Width 255 Col1=F2 Char Width 255 ユニオンで縦連結する時は、↓こうじゃないと定義内容が反映されない。 [001.csv] Col1=F1 Char Width 255 Col1=F2 Char Width 255 [002.csv] Col1=F1 Char Width 255 Col1=F2 Char Width 255 [003.csv] Col1=F1 Char Width 255 Col1=F2 Char Width 255 何で? ・tableA 日付、名前、国語、算数、英語 5/1 赤木 100、100 5/1 三井 50、70 5/1、桜木、40、20 6/1 赤木 100、100 6/1 三井 50、50 6/1、桜木、20、40 7/1 赤木 100、100 7/1 三井 70、70 7/1、桜木、50、50 ・tableB 採点開始日、名前 7/1、桜木 5/1、赤木 6/1、三井 ・採点平均 名前、国語平均、英語平均 赤木 100、100 三井 60、60 桜木 50、50 ↑のテーブルAのデータを テーブルBの採点開始日からの採点平均をだしたい ↓で大丈夫だろうか? あらかじめJoinしておいたほうがレスポンス的にはよいのかな? SELECT tableA.名前,AVG(tableA.国語)AS 国語平均,AVGtableA.英語)AS 英語平均 FROM tableA,tableB WHERE tableA.日付 >= tableB.採点開始日 AND tableA.名前,tableB.名前 >>381 tableA は 日付、名前、国語、英語 です。 >>381 SELECT tableA.名前,AVG(tableA.国語)AS 国語平均,AVG(tableA.英語)AS 英語平均 FROM tableB inner join tableA on tableA.日付 >= tableB.採点開始日 AND tableA.名前=tableB.名前 group by tableA.名前 でいいんじゃないかな >>383 ありがとうございます join したほうがいいのかな これを参考にしてやってみます。 >>384 データ量はたぶんたかだか数万レコード程度だろうから、どんなやり方でもパフォーマンス的には気にする必要ないと思うよ >>383 横からだが、fromとwhereで結合しても、joinで結合しても 書き方が違うだけで同じだぞ パフォーマンス気にするなら、使ってるDBMSの実行計画読めるようにならないと 事前に結合した実データ(のテーブルやビュー)用意するんじゃなければ SQLの書き方では差がでないのが原則 じじいが嘘を広めていることもあるから混乱するんだよな。 tableAのデータがあった場合、tableBの結果と、tableCのビューが欲しいです。 tableAの補習が入った場合は学校にいくまでの間はすべて補習の時間になります。 まったく書き方が見当がつかないのでアドバイスお願いします tableA 時間、学校、部活、補習 2017/6/1 06:00:00、NULL、OK、NULL 2017/6/1 07:00:00、NULL、OKL、NULL 2017/6/1 08:00:00、OK、NULL、NULL 2017/6/1 09:00:00、OK、NULL、NULL 2017/6/1 10:00:00、OK、NULL、NULL 2017/6/1 11:00:00、OK、NULL、NULL 2017/6/1 12:00:00、OK、NULL、NULL 2017/6/1 13:00:00、NULL、OK、OK 2017/6/1 14:00:00、NULL、OK、NULL 2017/6/1 15:00:00、NULL、OK、NULL 2017/6/1 16:00:00、OK、OK、NULL 2017/6/1 17:00:00、OK、NULL、NULL 2017/6/1 18:00:00、NULL、OK、NULL 2017/6/1 19:00:00、NULL、OK、NULL 2017/6/1 20:00:00、NULL、OK、NULL 2017/6/1 21:00:00、NULL、OK、NULL tableB 時間、活動 2時間、部活 5時間、学校 3時間、補習 2時間、学校 4時間、部活 tableC 時間、活動 7時間、学校 6時間、部活 3時間、補習 他人にわかる説明ができるようになったら解決するんじゃないかな。 >>388 tableBとtableCはビューB,、ビューCをだしたいに訂正します。 ビューCはビューBの部活、学校、補習の合計時間をだします。 tableA は1時間間隔で 活動した予定にOKが付きます 6時と7時は部活をやっているので2時間になります。 そのあと学校が5時間 その次は部活と補習がOKになっていますが 補習がOKなったら、学校がOKになるまで補習の時間なので 補習が2時間になります。 この流れで↓の結果が欲しいです。 ビューB 時間、活動 2時間、部活 5時間、学校 3時間、補習 2時間、学校 4時間、部活 ビューC 7時間、学校 6時間、部活 3時間、補習 SQLだけで書くのは見当がつかないのでアドバイスお願いします。 SQLだけで書けないと思ったのにSQLスレなのか DBだけでやれない想定として、どういう風に実装予定なの? ざっくりでいいからさ(Java使って、とかWindows上でとか) SQLだけでできるかわからないので質問しました。 今回のような内容はSQLでやるべきではない?SQLでできてもものすごくめんどくさい? の状態です。似たような内容を何件か取得したいと思っているのでしりたいです。 SQLだけでビューB、ビューCをだせるなら、Windows上のアプリ でそれを取得してCSVデータにするのが簡単だと思っています。 SQLだけで無理ならtableAのデータからCSVデータを作成のつもりです。 ビューとして取る必要があるの? 画面に表示したいとか? 取得したデータをそうしたいの? ビューとして取れるようにしておけばそのままCSVにだすだけで簡単なのと、 画面に表示したいと思っています。 取得したデータの操作は考えていません。 データが絶対に1時間間隔で抜けはないってならSQLだけでできるんじゃね 俺ならBはtableA を時間でソートして、ホストアプリでブレークチェックしながらカウントして表示するけどな >>388 は1時間間隔でなっていますが 秒単位で間隔は一定ではないです。 すみません。 Windows上のアプリはあまり動作増やしたくないなと思っていたんですが SQLだけでやろうとすると 大変?って感じなのかな 普通データベースの動作を増やさないように工夫すべきなんだけどな > は1時間間隔でなっていますが > 秒単位で間隔は一定ではないです。 意味不明だし後出しフラグ立ってるしすまんが抜けさせてもらうわ mdbファイルをDSNで一般に公開する方法を教えてください。 perl公開ならiisを使えばよいことは分かります。 pdf公開ならftpサーバを使えばよいことは分かります。 mdbファイルはiisを使って公開できるのでしょうか? iisには接続文字列の設定がありますが意味が分かりませんでした。 odbcad32.exeはネットワーク越しは無理みたいでしたし。 ACCESSというお高いソフトにはmdbファイルを公開できる サーバ機能が含まれているのでしょうか? >>402 データベース(ファイル)を一般公開してはいけません mdbはファイル共有型だから そのmdbファイルをファイル共有できるようにすればOK とレスしてみたけど そのレベルで一般に公開するのはやめとけ さすがにイントラでってことなんだろうけど、それでも公開はまずいっしょ 漏れをそのレベルとしか見れない人よりはレベル高いと思ってる。 ここまで6件のレスがついたが誰人答えを知らないほどレベルの高い質問をしてしまった。 漏れよりレベルの高い人を待つ。 合計7人が回答をお待ちしています。 >>409 とりあえず2chで質問とかアホなことしてる時点で低レベルやぞ? 分かっておる。しかしそんな漏れよりももっとレベルの低い人が見つかった気がして ちょっとうれしくなった。 あんたも答える知識の無い低レベルだな。 FileMaker入れて漏れは今解決したよ。 7人の戦士のうち結果的に漏れが一番レベルが上になったようだ。 ばいばい。 低いレベルというか専門性が違うだけでしょ SQLスレで聞くのも違う気がするし 聞けるスレがないと言うのも気の毒だったけど しかし、もっと違うアプローチをすべきだとは思った MDBファイルはADOを使ってPHPからアクセス出来るので IIS上で上手くやればWebサイトとして構築出来るんじゃないかな? 彼はデータのを表示させるためなら、どんな方法でもよいとしか言ってないぞ? FTPでファイル転送してるらしいから、mdbファイルを渡せばいいんじゃないのか? >>414 Webサイト構築したいとか言う話じゃないし、それが出来るレベルの人間の質問でもないけど >>415 彼って誰だよ 表示出来ればどんな方法でもいいとか誰がいってるの? mdbをDSNで直接指定できるようにするにはファイル共有でアクセスできるようにすればいい それを一般に公開するかどうはやる奴が決めればいい >>418 でも、iisやftpの話を出してきてるし 一般に公開する方法ってことだから 内容を表示出来れば要件は満たしそう >>402 は何を公開するとも言ってない。 Perlのスクリプトを公開するのもコードを公開するとも受け取れる。 PDFファイルはなぜかFTPでダウンロードさせてるあたりから、助言する段階の情報がまだない。 PostgreSQLでいうと、port 5432をインターネットに公開したいってことでしょ >>420 >mdbファイルをDSNで一般に公開する方法を教えてください って言ってるけど? ここのスレは>>411 にとって >漏れよりももっとレベルの低い人 の集まりで >答える知識の無い低レベル らしいから、そんなのこちらが考えるだけ無駄 WebブラウザでAccessの画面を開きたいレベルの話だと思うけどな。 PDFファイルをローカルで開いていることもわからないくらいだから。 すいません質問です 記事テーブルとカテゴリテーブルがあるのですがそれぞれのID部分を post_id category_id とするのか、単に id とするのかどちらがいいでしょうか? ネーミングの問題?自分で作ってるものなんだろうけど、3ヶ月後の自分は他人なんだから、そんなしょーもないところで 手を抜かずにちゃんとした名前、この場合ならpost_ , category_ 等々にしたら? >>426 そのIDが同じものでないなら、ただのIDという名前はやってはいけないレベルの命名。 作った当初は覚えているだろうけど 何年か経ってSQLソースを見た時に 「このidってなんだったっけ?」 てことになる 普通にidでええやろ category.category_idとかアホみたいやん デフォルトは主キーがIDのフレームワークもある時代に何言ってんだか >>434 データベースに詳しくないのが無茶苦茶なことをやるんだよな。 ナチュラルジョインも知らないのが設計するとそうなる。 皆様ありがとうございますm(_ _)m idは他のテーブルでも使用されるので post_id などに統一しようと思います どんなテーブルだろうが id は id やろ? テーブル見ればなんの id か分かるだろ? アホはアホなとこに神経使うんだな(笑) maker.code (PK) product.code (PK) 設計はともかくこういう命名規則も許せないのか、気になるところね id列にも名前に修飾詞をつけておくとusing句が使いやすいというメリットがあるんやで なんでも原理原則に従うのがいつも最良の方法とは限らんのや テーブル以外のidも意識しろって話でしょ 全部idだとどこの何のidか意識する必要あるし、外部キーとしてidが多々あるとNGだね ナチュラルジョインも知らないのが設計するとそうなる。 >>444 最近覚えた言葉を使いたがるやつっているよね 同じカラム名で意味の異なる属性は、RDBではないな。そのテーブルの主キーではあるが、業務上、意味がない値を格納するだけだとしてもよろしくない。MS-Accessの古い慣習の影響か。 あのさぁ、1プロジェクトで数百以上のテーブルとか普通にあるんだけど、それぞれユニークなカラム名付けるのか? カラム名が同じなら、その項目同士にリレーションシップがあると考えるのが標準SQL。 >>450 リレーションシップは外部キー制約があるかどうかではない。 >>442 て言うか単一テーブルだけでないなら普通そうするよね テーブル名指定するなら、テーブル名をコラム名の一部に使うのと同じ事になる 考え方の違いだな。 テーブルはエンティティを表すとするならカラムはその固有の属性だが、もともとのリレーショナルモデルでは 先に属性があってその関係をリレーション(テーブル)として表すわけなんで、同じ属性が異なる複数の リレーションに含まれ得る。 すみません、SQLの実行の順番ってどうなってるのですか? select hoge from tableA inner join (...) subQuery1 on(...) inner join (...) subQuery2 on(...) みたいなsqlがあるとき、どのどこから実行されるのですか? from→where→group by→having→select→union等→order by の順に実行したかのような結果になる(from内のjoinは左から) 内部動作として実際にこの順で実行しているかはまた別の話 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる