SQL質疑応答スレ 17問目 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
このスレは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
などの質問を受け付けるスレです。
SQLという言語はISOによって標準化されていますが
この標準を100%実装したDBMSは存在せず、
また、DBMSによっては標準でない独自の構文が
追加されていることもあります。
質問するときはDBMS名を必ず付記してください。
【質問テンプレ】
・DBMS名とバージョン
・テーブルデータ
・欲しい結果
・説明
前スレ:
SQL質疑応答スレ 16問目
http://echo.2ch.net/test/read.cgi/db/1447160858/ >>353
ありがとうございます!印刷して家宝にします!!! >>354
列の並び順を替えるにしても、行の順が元テーブルと違っちゃうかも
しれませんよという話です。
キーの部分を書くのが面倒で省略したということかもしれません。 行の順序が変わったとしても、それが何か影響を与えるとは思わないんだが 初めてVPSで構築しています。
MySQL設定でハマってます。
Pleskだと/etc/my.cnfや/etc/php.d/mysql.iniは無視されるのでしょうか?
my.cnfに書いてみたんですが、どうも反映されてないようです。
MySQLTunerを実行してみると
failed to execute: SELECT VERSIONのようなのが鬼のように表示され、
General recommendationsに下記のように表示されてます。
query_cache_size (=0)
query_cache_type (=0)
query_cache_limit (> 1M, or use smaller result sets)
join_buffer_size (> 128.0K, or always use indexes with joins)
tmp_table_size (> 16M)
max_heap_table_size (> 16M)
thread_cache_size (start at 4)
table_open_cache (> 400)
performance_schema = OFF disable PFS
innodb_file_per_table=ON
innodb_log_file_size * innodb_log_files_in_group should be equal to 1/4 of buffer pool size (=64M) if possible.
(=0)は0にしなさい。
(> 1M)は1MB以上に指定しなさい。
それに合わせてmy.confに入れてみたんですが、
これが全く変わりません。 straceしてみてどの設定ファイル読んでるか確認してみたら? 久しぶりに来た半初心者なのですが、上の方の議論で出てた会計年度の話は、単に引き算を利用してはいけなかったんでしょうか
4ヶ月引いて1日足して、としてやれば安定して通常年度に戻せる気がするのですが 日付から年度を求めたい、という話?
そういうのでもいいけどそれ間違ってるからね どの話をしようとしているのか分からん
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
リレーションシップは外部キー制約があるかどうかではない。 ■ このスレッドは過去ログ倉庫に格納されています