SQL初心者質問スレ [無断転載禁止]©2ch.net
レス数が900を超えています。1000を超えると表示できなくなるよ。
>>837
俺をダメ認定するのはお前の勝手だけどそれでお前の能力が上がるわけでもないぞ?
むしろ自己満足のために周囲の評価は下がる方向だけどいいんかそれで?w >>835
返信ありがとうございます。
type a と type b で同一の年月日で別の data を持つ為、それを同時に出したいのです。
ですので、それではダメでした。
>>838
カレンダー表示させる為のSQLです。
日毎にtype a の data と type b の data を表にしたいのですが、
できれば年月日を一回のループで終わらせたいのです。 ごめんなさい。自己解決しました
select t1.data , ( select t2.data from テーブル as t2 where year = 2017 and month = 1 and day = 1 and type = 'b' )
from テーブル as t1 where year = 2017 and month = 1 and day = 1 and type = 'a'
でいけました
もっと簡単に書けるかもしれませんが、一旦これで済ませます
助言ありがとうございました >>834
SELECT year, month, day,
MAX(CASE WHEN type = 'a' THEN data END) as data_a,
MAX(CASE WHEN type = 'b' THEN data END) as data_b
FROM foo
GROUP BY year, month, day fromの段階で2017年1月1日までは絞り込んじゃいかんの?
あとはCASE式でわければいいし >>846
クエリ1回で1ヶ月分だかの範囲取得したいんじゃないの?
しらんけど >>842
ちょっと悪い書き方だな。
だいたいSELECT句でtype列を選択してはいけない理由は何なのか? >>839
自分の客観的な評価を知ることができたとは思わないんだろうか PostgresSQLについて質問です
hogeテーブルに日時を2017-06-21 20:08:45のような形で保存しているdatetimeフィールドがあるとして、
「datetimeが現在日時から120分以内の行を抜き出す」場合にはWHERE節に何と書けばいいのでしょうか? >>853
where col between now() and now() + '120 minutes' すみません、言葉足らずでした
datetime列はそのときの現在時刻を入れていく列です
>>854のようにnowを使ってやってみます
ありがとうございました >>857
そこは解釈の問題
なので要件を確認した方がいいな そのときの現在時刻を入れていく列ってことらしいから
未来時間は入らないだろうなあ now() - interval '120 minutes'
と、intervalを明示しといた方がいい気がする テーブルとして
Hoge:カラム HogeId,Name
Tag:カラム TagId、Name
TagRelation:カラム Id、HogeId、TagId
のようなものがあっって要はHogeにTagをTagRelationを関連付けているとして、
TagとしてId=1、2、3のものがあったとしてその3つのTag全てへの関連を持つHogeを列挙したいとしたらSQL一発でできますか?
TagRelationでは同じHogeとTagへの関係が重複してあり得るものとします。
distinct,group by,count辺り使えばいけるのかな? おお、あざす。ああHaving句とか知らんかった。
SQLiteでdistinct絡めたものがなんかコンパイルエラーになるけれど大筋は分かったのでいろいろ試してみる。ありー 成果物おいときますね
セレクト ItemCommon.Id,ItemCommon.DisplayName
from (セレクトdistinct TagRelation.ItemId as itemId,TagRelation.TagId as tagId from TagRelation
where TagRelation.TagId in (
'eea01c2b-e0f8-418e-a942-d4e1f43e71f9',
'6668707d-ab6e-4e48-837d-b45ae3954360'
))
inner join itemCommon on itemId=ItemCommon.Id
group by ItemCommon.Id having count(*)=2
order by ItemCommon.Id SQL文を弾いてしまうの、どうにかならないものかな・・
中継クラウドがやっているようだ あまり話題にならないのは、レスでSQL文を書く用事があるのはこの板くらいだからかw 作業テーブル
ID、作業番号...
作業詳細テーブル
ID、作業ID、作業開始時間、作業終了時間...
作業明細テーブル(作業詳細テーブル 1-多 作業明細テーブル)
ID、作業詳細ID、作業内容、宿泊費...
うろ覚えですがこんな感じのテーブルがありまして、作業内容にhogehogeもしくはnullnullという言う文字列が入っている作業番号を知りたいまたは入っていない作業番号を知りたいのですが
試行錯誤しながら副問い合わせを使ってもできません。以下の感じになりました
// hogehogeもしくはnullnullが入っている作業番号
SELECT 作業番号
FROM 作業テーブル INNER JOIN 作業詳細テーブル ON 作業テーブル.ID = 作業詳細テーブル.作業ID
WHERE 作業詳細テーブル.ID IN
(SELECT 作業詳細ID
FROM 作業明細テーブル
WHERE 作業内容 LIKE '%hogehoge%' OR 作業内容 LIKE '%nullnull%')
// hogehogeもしくはnullnullが入っていない作業番号
SELECT 作業番号
FROM 作業テーブル INNER JOIN 作業詳細テーブル ON 作業テーブル.ID = 作業詳細テーブル.作業ID
WHERE 作業詳細テーブル.ID IN
(SELECT 作業詳細ID
FROM 作業明細テーブル
WHERE 作業内容 NOT LIKE '%hogehoge%' OR 作業内容 NOT LIKE '%nullnull%')
どうすれば特定の文字列が入っている作業番号を抜き出すことができるでしょうか?教えてください >>870
なんかおかしな結合条件になってるけどそれぞれのテーブルはIDで紐づけてるわけじゃないの? hogehogeもしくはnullnullが入っていない作業番号
ORじゃなく、ANDじゃ?と思った >>871
2番目以降、名前IDで紐付けしています
>>872
やっぱりそうですかね? >>870
速度考えなきゃ
-- hogehogeもしくはnullnullが入っている作業番号
SELECT 作業テーブル.作業番号 AS 作業番号
FROM 作業テーブル
INNER JOIN 作業詳細テーブル ON 作業テーブル.ID = 作業詳細テーブル.作業ID
INNER JOIN 作業明細テーブル ON 作業明細テーブル.作業詳細ID = 作業詳細テーブル.ID
WHERE 作業詳細テーブル.作業内容 LIKE '%hogehoge%' OR 作業詳細テーブル. 作業内容 LIKE '%nullnull%'
GROUP BY 作業テーブル.作業番号
で行けるんじゃね?
入ってない方は
SELECT 作業番号 FROM 作業テーブル
EXCEPT
SELECT 以下同文
でいいんじゃね? >>874
素直にFROM句で3つのテーブルを結合しろよ。 >>877
性能といいながら、そんなにコストの高いSQLを勧めるなよw 「ないものはない!」みたく、曖昧な表現だな
「速度を考えないで良いなら」と言いたいのでは? こんなんでどうだろうか
SELECT distinct 作業番号
FROM 作業テーブル,作業詳細テーブル,作業明細テーブル
WHERE
作業テーブル.ID = 作業詳細テーブル.作業ID AND
作業詳細テーブル.ID = 作業明細テーブル.作業詳細ID AND
(作業明細テーブル.作業内容 LIKE '%hogehoge%' OR
作業明細テーブル.作業内容 LIKE '%nullnull%');
SELECT distinct 作業番号
FROM 作業テーブル,作業詳細テーブル,作業明細テーブル
WHERE
作業テーブル.ID = 作業詳細テーブル.作業ID AND
作業詳細テーブル.ID = 作業明細テーブル.作業詳細ID AND
(作業明細テーブル.作業内容 NOT LIKE '%hogehoge%' AND
作業明細テーブル.作業内容 NOT LIKE '%nullnull%'); >>879
ほっといてやれよ
僕が考えた最強のSQLなんだから >速度考えなきゃ
速度も考慮しなくては
速度を考えなくてもいいなら
どっちにも取れるw >>881
作業内容にhogehogeもしくはnullnullを含むは検索できましたが逆ができません
いろいろ試行錯誤していても取り出せません
上記にも書いてあるんですが、作業詳細テーブルのレコード1つ対し作業明細テーブルのレコードが複数結びついているのでまたややこしくなっているんだと思います >>888
その作業番号に紐付く作業明細テーブルの作業内容に
hogehogeもしくはnullnullを含まないものがあれば抽出したいのか、
その作業番号に紐付く作業明細テーブルの作業内容に
hogehogeもしくはnullnullが含まない作業番号を抽出したいのか
どちらだろうか?
後者なら、前者でhogehogeもしくはnullnullを含む作業番号を抽出出来ているのだから、
その作業番号以外の作業番号を求めればいいのでは? >>889
後者です
論理演算的にNOT ORを使えばいいのでしょうか?
SELECT distinct 作業番号
FROM 作業テーブル,作業詳細テーブル,作業明細テーブル
WHERE
作業テーブル.ID = 作業詳細テーブル.作業ID AND
作業詳細テーブル.ID = 作業明細テーブル.作業詳細ID AND
NOT (作業明細テーブル.作業内容 LIKE '%hogehoge%' OR
作業明細テーブル.作業内容 LIKE '%nullnull%')
こんな感じですか? 速度考えなきゃ○○でいいんじゃね?
これ読んで速度考えたさいきょうの○○と思う>>879とか>>882の国語力 w >>891
> 後者です
>> 入ってない方は
>> SELECT 作業番号 FROM 作業テーブル
>> EXCEPT
>> SELECT 以下同文
>> でいいんじゃね? >>892
>速度考えなきゃ
で改行入ってるから、そこで文章が切れてると判断するかつながってると判断するか
その材料がないだろ、キミの国語力も怪しいw お前らまさか
件のsql見て処理速度分からないの?
じゃなきゃ文頭一行に
異様にこだわる理由はそれかよw >>893
できませんでした
質問する場所を変えるので取り下げます >じゃなきゃ
じゃも考慮しなくては
じゃを考えなくてもいいなら
どっちにも取れるw そりゃ悔しいだろうよw自分じゃ頭いいと思ってるんだからなw馬鹿すぎるwwww IPAの試験は半分国語の問題だからな。こういうのも意外と大事よ。 質問ですが
table点数
名前 年月日 点数
花道 2017/10/1 20
赤木 2017/10/1 80
三井 2017/10/1 20
花道 2017/10/5 10
赤木 2017/10/5 100
三井 2017/10/5 40
花道 2017/10/10 0
table成績
名前 評価 最終評価年月
花道 E 2017/9/1
赤木 A 2017/10/5
三井 C 2017/9/1
↑のようなテーブルがあったとして↓のビューを作成したい。
新規評価ビュー
ランキング 名前 テスト回数 平均点 評価
テスト回数は、table点数にある名前の回数で
対象データはtable点数の年月日が table成績の最終評価年月日に設定されている日以降
ランキングはテスト回数から番号を作成
平均点はtable点数の点数の平均
最終評価年月によってテスト回数をだすのがよくわからないのでだれかアドバイスお願いします。 >>904
> ランキングはテスト回数から番号を作成
テスト回数のランキングってこと?
ならこんな感じかな
create view View904 as (
select
rank() over (order by count(*) asc) as ランキング,
成績.名前 as 名前,
count(*) as テスト回数,
avg(点数.点数) as 平均点,
成績.評価 as 評価
from 成績
left join 点数 on 成績.名前 = 点数.名前
where 成績.最終評価年月 < 点数.年月日
group by 成績.名前, 成績.評価
)
group by と rank() は同時に使ったことないからもしかしてそこでエラーになるかも
その時はサブクエリにして改めて rank() を適用してちょ >>904
まずは、
・ランキング
・テスト回数
・平均点
・評価
を、自分でそれぞれ別のクエリで書いてみて、わからない奴だけ質問してくれ ↑のようなテーブルがあったとして↓のビューを作成したい。
新規評価ビュー
ランキング 名前 テスト回数 平均点 評価
↑この下に、どういう結果を期待しているのか、書いてみて ランキングってのは該当点数の平均点の順位で良いのか?
とりあえず書いてみた
with
tmpデータ as (
select 名前,AVG(点数) as 平均点,COUNT(名前) as テスト回数
from(
select * from table点数 t
where t.年月日 >= (select MAX(最終評価年月) from table成績 where 名前=t.名前)
) t2
group by 名前
)
select
(select COUNT(*)+1 from tmpデータ where 平均点>x.平均点) as ランキング,
table成績.名前,テスト回数,平均点,評価
from table成績
left join tmpデータ x on table成績.名前=x.名前
ウィンドウ関数とか使えばもうちょいきれいに書けるのかもしれんが
あれ苦手なんだよなぁ レスがいっぱい早めに帰ってよかった!
>>907
>>909
今回こんな感じの結果を求めていました。
ランキング 名前 テスト回数 平均点 評価
1 花道 3 10 E
2 三井 2 30 A
3 赤木 1 80 C
>>906
>>910
ありがとうございます。さっそく試してみます。 >>906 >>910
ありがとうございました。思ってたよな動きになりました。
追加で質問なのですがsqlserverだとして
>>906の書き方
>>910の書き方で
↓のようなのを作るのは問題ないですか?
>>904の
table点数に 身長等のカラムを300追加したtable
新規評価ビューと同じようなビューを30作る。
DBとしてはDB湘北、DB陵南、DB海南等を10作成↑の内容を各DBが持っているとして
DB湘北の
table点数に数秒に1件Insertされて数百万件のデータが作られていく
Insertされるごとに30のビューが更新されていくと思うのですが、これくらいならSQLserverで問題なく動くかな?
Insertは各DBの中のtable点数だけですが
10のDBのtable点数に同時にInsertは影響がでる?のかきになります >Insertされるごとに30のビューが更新されていく
普通のビューは実データもってないから、ビューが更新されるとかありません
あとは何したいかわからんけど、実機で性能評価してください
ちゃんとした設計のDBなら、数秒に1回の追加も数百万のselectも問題ないけど
まあ、俺なら一つのテーブルにカラム300とか、まずほんとに正しいか疑うけどな >>914
> ちゃんとした設計のDBなら、数秒に1回の追加も数百万のselectも問題ないけど
これは純粋にハードの性能の問題です嘘をつかないでください やりたいこととしては単純にビューの内容をGridやエクセル等に表示したいです。
30のビューを作るとしても
実機で性能評価する前に>>913ぐらいなら余裕でしょなのか、そもそも無茶なのか簡単な感触がほしいなと。
300カラムは名前、時間+5tableぐらいに分割できますが
一つのビューは1tablか2tableの情報なのでtableは分割したほうがいい?と思うのですが
insaret*5がどのくらい時間かかるかわからなかったのでinsaret*1の300カラムで聞いてみました。
やっぱり分割するべきですかね >>915
今どきのまともなハードなら
ってのを追加しとくわ
それなりのハードでもDB設計腐ってたら、その程度の処理でも大変なことになるけどな >>917
「大変なこと」とはなんですか?ぼやかさずに具体的に言えばいいでしょうに
前言撤回します
アナタ嘘はついてないですね
無知なだけのようです >>919
自分の間違いを指摘されると「煽られた」ってw
どんだけ自分に都合いいんだよ馬鹿だなw 参考までに効きたいんだが、
毎秒100万アクセスがあるようなシステムってどういうものなの? >>921
某夢の国関係の予約サイトで予約開始直後とかは数十万TPS行く >>920
間違いの指摘ってこれ?
> これは純粋にハードの性能の問題です嘘をつかないでください
インデックスとかパーティションも知らんとかバカ過ぎるだろ 他人をバカにしていないと自分の存在価値を確認できない人が多いのかな >>925
お前それ好きだよなあw
どんだけバカにされたんだよw >>926
いや他人をバカにして草生やしてる人を結構見かけるから
そういう人の心の中をちょっと想像したりして楽しんでるだけだよ >>928
まあそうかもね
否定はしないよ
ただそういう人見てるとそんなに自意識過剰にならずにもっと気楽に生きればいいのになぁって思う >>929
え?お前が気張ってるからそんな狂った趣味になんだぜ? >>931
大体さあ無知ってお前が思ってる程恥ずかしい事じゃないぜ
一つ教わればその分お前が一つ賢くなるんだから
もっとフラットに自分をさらけだせばいいのに >>932
いやなぜ俺がフラットにさらけ出してない前提なのかは疑問だが
あなたのいう通りだと思うよ >>933
え?お前自分の無知を指摘されると馬鹿にされたって思う側の人だろw
簡単に分かった気になるなよ
無知でいいんだよ少しずつ理解してけば >>934
いや違うけど…
バカにされようがされまいが、自分の価値には何ら影響を与えないので
なぜなら自分で自分のことダメだと思ってないから >>935
それを「気張ってる」って他人は言うんだけど… ちょっと語弊があったかも
正確にはバカにされていると認識することがないといった方がいいのかもしれない レス数が900を超えています。1000を超えると表示できなくなるよ。