約 115,711 件
https://w.atwiki.jp/eco_yotuba/pages/11.html
コメントプラグイン @wikiのwikiモードでは #comment() と入力することでコメントフォームを簡単に作成することができます。 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/17_60_ja.html たとえば、#comment() と入力すると以下のように表示されます。 名前 コメント
https://w.atwiki.jp/magicman/pages/48585.html
【企画】ジャシン敗北!?新カード&新パック作成! 企画者:復帰勢 テーマ 邪神と水晶の花のパラレルワールドでタブララーサVSジャシン帝の戦いでジャシン帝が敗れた世界です カード制作の手助けとして一応背景ストーリーを下に書いておきます。 疑問点があったら教えて下さい (背景ストーリーと矛盾、関係の無いカードはお控え下さい) ルール 【ルールにはその企画のルールを書きましょう。】 背景ストーリーに矛盾、関係の無いカードは作らない 壊れカードも作らない 同じような立ち位置のカードを作ってもOK 例 Aさんがタブララーサのカードを作ってもBさんはタブララーサのカードを 作ってもOK その中で良かった方を採用します。 自由に使用可能なキーワード能力 テンプレート 作者:(作者名) 《(作品名)》 作品一覧 《ジャシンVSタブラ=ラーサVSライオネル(仮称)》 作者:(匿名) 《蝿黴王》 《水晶開戦クリス》 《「俺獅子」の頂天元 ライオネル・フリーダム》 《真実の名 オレサマレオサマ》 《「深淵」の頂天 ゼニスベル=ジャシン帝》 《ダンマのナラク ハトラ》 《偽りの暖炉 チマニ》 《ボルシャック=タブラ=ラーサ》 《禁断器官 TVR🟰38 》 《タブラサ=モモキング》 《富豪蝿皇 ゴルギーニ=タブラ=ゲルス》 《「宇宙」の頂天 ミケランジェロ》 《「奇才」の頂天 リフル》 《「超龍」の頂天 ギラゴン》 《「虎独」の頂天 ブレード・ティーガー》 《「轟破」の頂天 ハーキュリス》 作者 Osamu 《「無常」の極天 シャングリラ•リバタリア》 作者:焼きナスオ 《ガ:ナテハリクビ》 《邪聖杯》 コメント 蛇足だとは思いますが、企画者名などの情報をのせてくれるとありがたいです -- osamu (2024-03-06 00 01 39) 非常に申し訳ございません -- 復帰勢 (2024-03-06 00 25 55) テンプレート通りに書いて下さい -- 復帰勢 (2024-03-06 17 09 36) 参加させていただきます -- osamu (2024-03-06 22 16 18) 参加させていただきます。フレーバー内に若干の背景ストーリー的なものを載せていますが、大筋に矛盾するような箇所があれば無視していただけると助かります。 -- 焼きナスオ (2024-04-14 08 44 53) 名前 コメント 背景ストーリー ジャシンと戦うと敗北することを悟ったタブララーサは水晶の花の力を使い他の世界とこの世界を繋げた。 そしてその世界のタブララーサ達を集めそして尚且つ各世界のゼニスとシャングリラ達にも、修羅丸をさらった時と同じようにゼニス達にアビスを滅ぼす使命を与えジャシンと挑むことにしたのだ。 そして戦いは何日も続きある日タブララーサがジャシンにトドメを刺し戦いは終極を迎えた、、、
https://w.atwiki.jp/gundamfamily/pages/8834.html
407通常の名無しさんの3倍2019/11/18(月) 19 50 03.24ID vw4Mg4iz0 東方不敗「石破天驚……!」 ドモン「こ、これは……!? 俺は負けたのか……」 レイン「ドモン!?」 ウォン「それまで!」 ストーカー「なんということでしょう。 今日のお話の始まりはなんとあのドモンが東方不敗に負けるところからなのです。 ではドモンがこれからどう行動するのか見ていきましょう。 それでは、ファイト、レディーゴー!」 その日、ドモンは外出先から実家に帰ってきていた。レインもドモンと一緒だ。 アムロ「どうしたんだ、ドモン。ひどく疲れた顔をして」 ドモン「兄さん、俺に稽古をつけてくれ」 アムロ「……MS戦か? よしνガンダムを出して特訓しよう」 ドモン「違う。ガンダムに乗ってじゃない」 アムロ「じゃあ……、生身か!? こう言っては何だが俺達家族の間でドモンよりすぐれた生身の戦闘ができる者はいないぞ」 ドモン「違う。そうでもない。料理だ……」 ロラン「料理?」 ドモン「兄さん……、ロランでもいい。俺に料理の稽古をしてくれ!」 こうドモンが大声を出すと、家の玄関先に東方不敗とウォン=ユンファが現れた。 レイン「東方不敗マスターアジア!」 東方不敗「その通り。 ワシはマスターアジアの名の通り、アジア料理をマスターしようと努力する者でもある。 そしてそこのドモンはワシとの料理対決に負けた者だ!」 アムロ「料理対決!?」 東方不敗「ドモンは少年時代からワシとの修行の旅の際においしい料理を作ろうとしてきた。 しかるにここ数か月のドモンはたるんでおる。少年時代の輝きはどこに消えた? ドモンが作った麺はカップラーメンばかりではないか。もちろんカップラーメンはおいしい。 しかしカップ麺に頼ってばかりではガンダムファイトでワシには勝てん。 今回の料理対決でも負けたではないか。そう、ワシの作る麺料理『石破天驚麺』に!」 ウォン「石破天驚麺の隠し味はチョコレートです」 408通常の名無しさんの3倍2019/11/18(月) 19 52 36.69ID vw4Mg4iz0 アムロ「石破天驚麺……。何というネーミング……」 東方不敗「ドモン、悔しかったらワシをこえてみせろ! もう一度料理対決だ! ワシに今言えるのはここまでだな」 こうして東方不敗とウォンは兄弟家から去っていった。 後に残ったのは……。 ドモン「というわけだ。料理ならロランが得意だし、ぜひ俺に教えてくれ。 他の料理ならともかく麺料理は最近カップ麺ばかりなのは事実だし……」 アムロ「ドモン」 ロランに頭を下げるドモンにアムロはこう言い放った。 アムロ「確かにロランは料理が得意だが、 そういつもいつもたくさんのウチの兄弟達に料理の問題の際に頼まれては大変だ。 今回はロランに頼るのはなし!」 ドモン「えっ!?」 アムロ「ロランもいいな」 ロラン「はい、わかりました。アムロ兄さんがそう言うのなら」 ドモン「じゃあ俺はどうすれば……」 レイン「ドモン……」 アムロ「残念だがロラン以外の人に頼ってくれ。幸いレインは日本料理できるし」 レイン「それはそうですけど……」 アムロ「いっぱいいるじゃないか。ウチの家族もそうだし、ドモンの仲間達も協力してくれるはずだ」 シーブック「ドモン兄さんのためなら協力しますよ」 ドモン「シーブック!?」 ドモン、レイン、シーブックは商店街に出かけた。 目的はそう、あの店だ。 409通常の名無しさんの3倍2019/11/18(月) 19 55 07.05ID vw4Mg4iz0 カロッゾ「麺料理? 焼きそばパンあたりなら作るし、教えられるけど……。 ウチはパン料理の店だし」 3人はすぐにカロッゾに断られた。続いて。 キース「ウチの店もベーカリーだから。ごめんね」 ドモン「俺は……」 レイン「ドモン、元気を出して」 シーブック「そうそう」 コウ「他の人に聞くのは? 試作料理作るなら、人参料理以外なら食べられるよ!」 バニング「料理? みんなで何言ってるんだ?」 キース「パン屋の方のキースじゃないって」 ドモン「麺料理……」 レイン「ドモン、元気を出して!」 シーブック「そうそう」 コウ「他には例えばシャッフル同盟の人に料理を教わるとか……」 サイ=サイシー「アニキ達、ここでなにやってるの?」 レイン「あっ!」 ドモン「サイ=サイシー!」 ドモン達の前に中華料理の達人、サイ=サイシーとその恋人のセシルが現れた。 セシルはマーメイドガンダムのハンスの妹であり、 サイ=サイシーはもちろんドラゴンガンダムのガンダムファイターだ。 セシル「皆さん、お久しぶりです」 ドモン「実はかくかくしかじか……」 サイ=サイシー「料理対決!? それならオイラに頼ってくれよ。修行だ!」 ドモン達は修行のためにサイ=サイシーの厨房へ向かった。 サイ=サイシー「それで東方不敗との料理対決に何作ろうか」 ドモン「やはり麺料理だな。頼む、教えてくれ」 レイン「日本料理だとうどんやそば、夏ならそうめんやひやむぎ……」 このように会話しながら特訓して試作品を作っていると……、 今度はネオドイツのシュバルツ=ブルーダーが現れた。 シュバルツ「甘いぞ、ドモン!」 410通常の名無しさんの3倍2019/11/18(月) 19 57 53.55ID vw4Mg4iz0 ドモン「シュバルツ=ブルーダー!」 シュバルツ「今、この時にも東方不敗マスターアジアが何をしているのか知っているか!? アジア料理をマスターするため必死に努力しているんだぞ!」 シュバルツはドモン達を東方不敗やウォンの隠れ家に連れていくため みんなにゲルマン忍法『壁ぬけの術』を教えた。 そして厨房にいる全員でこっそり東方不敗の様子を見に行った。 コウ「ゲルマン忍法の壁ぬけの術ってこんなに簡単に覚えられるものなんだ……」 レイン「私もネオドイツのクルーの時、覚えたわよ」 シーブック(今度の怪盗キンケドゥの仕事の時、ありがたく使わせてもらおう……) サイ=サイシー「あっ、あれは東方不敗」 セシル「料理をしているようね」 台所では東方不敗が麺料理を作っていた。 ウォン「東方先生、まだ料理の練習をするのですか?」 東方不敗「当然。ふふ、ドモンは近日中に必ずワシに料理対決を挑んでくる。そういう男だ。 そして対決の時にワシがたるんでいたらどうしようもない。 ウォンこそワシに付き合わなくていいのだぞ」 ウォン「いえ、チョコレートが食べられますし……、何より東方先生の熱意に心を動かされました。 試食を続けましょう」 東方不敗「すまんな」 シュバルツ「以上だ」 ドモン達はまたこっそりとその場を離れるとサイ=サイシーの厨房に戻った。 レイン「東方不敗があんなことを考えていたなんて……」 ドモン「俺も負けてはいられない。サイ=サイシー、続けて特訓を頼む!」 サイ=サイシー「ドモンのアニキ、やる気がみなぎってる感じだ!」 シーブック「調理のアシスタントならまかせて。パン屋の仕事が役に立つかも!」 コウ「試作1号機……、じゃなかった試作料理を食べる係ならまかせて。 人参以外なら何でも食べられるよ!」 セシル「コウさん、あんなに一気に大量に料理食べられるんだ……」 シュバルツ「まだまだドモンの力になる者がいるぞ!」 ドモン「何?」 サリィ「ドモン、そしてみんな、私達も力を貸すわ」 ウーフェイ「サイ=サイシーの助けにもなるだろう」 メイラン「話は聞いた。みんなで東方不敗に料理を出そう。うまいと言わせよう」 みんな「オー!」 411通常の名無しさんの3倍2019/11/18(月) 20 01 07.92ID vw4Mg4iz0 そして数日後、料理対決当日。 東方不敗「やはりドモン、再び料理対決を挑んできたか」 ウォン「今回の麺は? 料理が2つありますね」 ドモン「説明しよう。『石破ラブラブ天驚麺』と『石破天驚ゴッドフィンガー麺』だ」 東方不敗「ほうほう」 サリィ「平たくいうとドラゴンズの本場、名古屋名物きしめんと味噌煮込みうどんね」 東方不敗「それでは食べてみよう。ん……!?」 東方不敗はわりばしを使って麺を食べ比べると満足そうにうなずいた。 東方不敗「これはワシの負けだな」 ドモン「まだ自分の料理を俺に食べさせてもいないのに……」 東方不敗「食べさせなくともわかる。おいしさもあるが、まずこのメニュー」 サリィ「きしめんや味噌煮込みうどんだから勝ったのね!? 自分から負けを認めたのね!?」 東方不敗「違う」 サリィ「あらら……」 東方不敗「みんなで決めたメニューだから勝ったのだ。 議論して試作し、頑張ろうとしたドモンの少年時代の純粋な心が伝わってくる。 カップ麺をただ作るだけではない心が伝わってくる……」 ウォン「東方先生、それでは」 東方不敗「ワシの完敗だ。 さあ、ここにいる者全員でドモンやワシの麺を食べよう。ドモン、一緒に調理するぞ」 こうしてドモンや東方不敗はシーブックやコウ、サイ=サイシーやレインやウォン達に麺料理をふるまった。 シュバルツ「ゲルマン忍法! 『マスクぬけの術』!」 コウ「麺がマスクをすりぬけて口の中へ入っていった!? でも仕方ない。こんなにおいしい料理だもの。 3つの料理ともまさに運命の麺、麺オブデスティニー!」 シーブック「コウ兄さん、どれだけ麺を食べるの……?」 link_anchor plugin error 画像もしくは文字列を必ずどちらかを入力してください。このページにつけられたタグ
https://w.atwiki.jp/aisz/pages/20.html
ホーム
https://w.atwiki.jp/softy/pages/24.html
2.「整数型変数a,bを宣言し、それぞれの値を標準入力から入力し、その和を出力するプログラムを作成せよ。」 教科書に載っている、入力結果をそのまま出力するプログラムは大体以下の通りですが、 stdio.h int main() { int a, b; printf("An example of scanf().\n"); printf("a "); scanf("%d", a); printf("b "); scanf("%d", b); printf("/* hogehoge */", /* 和を出力したい場合は、ここを変更すればおkです。 */); } printfの内容を変更するほかにも、途中でaとbを足すという方法もあります。 てすてす stdio.h int main()
https://w.atwiki.jp/kouteieki2010joho/pages/891.html
長崎新聞の記事へ飛ぶ (魚拓) 口蹄疫発生に備え埋却作業演習 県北振興局が県内初 牛に見立てた袋の埋却作業に当たる担当者=佐世保市小佐々町西川内 県県北振興局は6日、佐世保市小佐々町西川内の県有地で、口蹄疫発生を想定した家畜の埋却作業の演習を県内で初めて実施した。 県の県北、島原、県央の各振興局、県北の各自治体、JA、畜産、建設業関係者ら約120人が参加。このうち24人は実際に白い防護服を着て作業に当たった。 演習では、防護服の着用の仕方、殺処分した家畜を運搬するトラックの消毒なども実施。殺処分された家畜に見立てた袋4個を、長さ5メートル、幅4メートル、深さ4メートルの穴にクレーンで下ろし、作業の前後に消石灰で消毒したりした。 約1時間半の作業を汗だくになりながら完了。参加したJAながさき西海松浦営農経済センターの市山康治さん(45)は「あってはならないことだが、万が一のことを考えれば、非常にいい経験。ただ、長時間にわたり、何日もやるかと思うと大変な作業になるのでは」と話した。 宮崎県で実際に埋却作業に当たっていた県北振興局の職員は「机上だけでなく、実際に経験していないとなかなかできない作業。もし発生した場合には、いかに迅速に埋却までを済ませるかが感染拡大を防ぐポイントになる」と話した。 7月 対応 防疫関係
https://w.atwiki.jp/sqlpuzzle/pages/36.html
問題 各仕事に対するコンサルタントの名前と請求金額を求めたい。請求金額は書く労働時間と時給をかけると求められるが、コンサルタントの時給は期間によって変化する。 Consultants emp_id | emp_name --------+------------ 1 | Larry 2 | Moe 3 | Curly Billings emp_id | bill_date | bill_rate --------+------------+----------- 1 | 1990-01-01 | 25.00 2 | 1989-01-01 | 15.00 3 | 1989-01-01 | 20.00 1 | 1991-01-01 | 30.00 hoursworked job_id | emp_id | work_date | bill_hrs --------+--------+------------+-------------------------------- 4 | 1 | 1990-07-01 | 3.00 4 | 1 | 1990-08-01 | 5.00 4 | 2 | 1990-07-01 | 2.00 4 | 1 | 1991-07-01 | 4.00 Consultants:コンサルタントテーブル Emp_id:社員ID emp_name 社員名 Billings 請求書テーブル bill_date 請求日 bill_rate 時給 Hoursworked 実働時間テーブル job_id 実働ID work_date 実働日 bill_hrs 実働時間 chiakiの解答 考え方 1つ目のビューで、実働日が請求日より後にある場合の、社員名・請求日・時給・実働日・実働時間を求める。 2つ目のビューで、前に作ったビューを社員名と実働日でグループ化し、社員名・請求日の最大値・実働日を求める。 最後に、上の二つのビューを使って、給料合計を求める。 SQL文 ①1つ目のビュー CREATE VIEW Consultants2 (emp_id, emp_name, bill_date, bill_rate, bill_hrs, work_date) AS SELECT C.emp_id, C.emp_name, B.bill_date, B.bill_rate, H.bill_hrs, H.work_date FROM Consultants C, Billings B, HoursWorked H WHERE H.emp_id = C.emp_id AND H.emp_id = B.emp_id AND H.work_date = B.bill_date; emp_id | emp_name | bill_date | bill_rate | bill_hrs | work_date --------+------------+------------+-----------+----------+------------ 1 | Larry | 1990-01-01 | 25.00 | 3.00 | 1990-07-01 1 | Larry | 1990-01-01 | 25.00 | 5.00 | 1990-08-01 1 | Larry | 1990-01-01 | 25.00 | 4.00 | 1991-07-01 1 | Larry | 1991-01-01 | 30.00 | 4.00 | 1991-07-01 2 | Moe | 1989-01-01 | 15.00 | 2.00 | 1990-07-01 ②2つ目のビュー CREATE VIEW Consultants3 (name, bd, wd) AS SELECT C2.emp_name AS NAME, max(C2.bill_date) AS BD, C2.work_date AS WD FROM Consultants2 C2 GROUP BY C2.emp_name, C2.work_date; name | bd | wd ------------+------------+------------ Larry | 1990-01-01 | 1990-07-01 Larry | 1990-01-01 | 1990-08-01 Larry | 1991-01-01 | 1991-07-01 Moe | 1989-01-01 | 1990-07-01 SELECT C2.emp_name, SUM(C2.bill_rate*C2.bill_hrs) FROM Consultants2 C2, Consultants3 C3 WHERE C2.emp_name = C3.name AND C2.bill_date = C3.bd AND C2.work_date = C3.wd GROUP BY C2.emp_name; 結果 emp_name | sum ------------+---------- Larry | 320.0000 Moe | 30.0000 (2 行) satomiの解答 考え方 副問い合わせで、実働日以前の直近の請求日を選ぶ emp_nameでグループ化し、該当する請求日の時給と、実働時間をかけた合計を求める。 SQL文 select c.emp_name,sum(h.bill_hrs*b.bill_rate) from consultants c,billings b,hoursworked h where c.emp_id=b.emp_id and c.emp_id=h.emp_id and b.bill_date=(select max(b1.bill_date) from billings b1,hoursworked h1 where h.work_date b1.bill_date and b1.emp_id=h1.emp_id and h1.emp_id=h.emp_id group by h1.emp_id) group by c.emp_name; 結果 emp_name | sum ------------+---------------------- Moe | 30.0000 Larry | 320.0000
https://w.atwiki.jp/sqlpuzzle/pages/39.html
問題 fooの数量、barの数量を計算書番号ごとに出す accounts foo bar 答え acct_nbr acct_nbr | bar_qty acct_nbr | bar_qty |foo_qty|bar_qty ----------- --------+-------- ---------+--------- -------------------- 1 2 | 160 2 | 160 → 1| 10 | 0 2 3 | 320 3 | 320 2| 60 | 160 3 3 | 640 3 | 640 3| 80 | 961 4 3 | 1 3 | 1 4| 0 | 0 サンプルコード↓これ以外を考えよう♪ select a.acct_nbr, coalesce(f.foo_qty,0) as foo_qty_tot, coalesce(b.bar_qty,0) as bar_qty_tot from accounts as a left outer join (select acct_nbr,sum(foo_qty) as foo_qty from foo group by acct_nbr) as f on f.acct_nbr = a.acct_nbr left outer join (select acct_nbr,sum(bar_qty) as bar_qty from bar group by acct_nbr) as b on f.acct_nbr = b.acct_nbr; COALESCE(式1,式2,式3,...)式1がNULL以外→終了、式1がNULL→式2実行。 式2がNULL→式3実行、引数で指定された式がNULL以外の値を返すまで続く 全ての式がNULL→NULLをCOALESCEの結果として返す yukaさんの回答 fumikoの回答 考え accountsのacct_nbrごとにfooからacct_nbrが同じときだけfoo_qtyを足していく barからacct_nbrが同じときだけbar_qtyを足していく SQL select ac.acct_nbr, sum(distinct case when ac.acct_nbr = foo.acct_nbr then foo_qty else 0 end), sum(distinct case when ac.acct_nbr = bar.acct_nbr then bar_qty else 0 end) from accounts as ac,foo,bar group by ac.acct_nbr 結果 acct_nbr | sum | sum ----------+-----+----- 1 | 10 | 0 2 | 60 | 160 3 | 80 | 961 4 | 0 | 0
https://w.atwiki.jp/sqlpuzzle/pages/11.html
パズル22:大家の悩み 問題について マンションの住人のうち家賃を払った人物についてのレポートを作りたいが考えたSQLではうまくいかないのでその原因と対策を説明したほしいという問題。 ちょっと問題文が読みづらくて、何を求めたいのかがよく分からなかったのですが、各部屋に対して、借主がある期間内に支払っているかもしくは支払っていないかを対応付ける表がほしいみたい。多分答えとしてほしいのはこんなのだと思われます。 +----------+-----------+--------------+--------------+ | unit_nbr | tenant_id | vacated_date | payment_date | +----------+-----------+--------------+--------------+ | 1 | 1 | NULL | 2007-03-01 | | 2 | 1 | NULL | NULL | +----------+-----------+--------------+--------------+ つまり部屋(Unit)に対して借りてる人(tenant)が期間内に払ったらpayment_dateに日付がはいって、そうでなかったらNULLになる。ということだと思われます。 (unit_nbr,tenant_id)=(1,1)はちゃんと支払われている (unit_nbr,tenant_id)=(2,1)は支払われてない ちえみんの回答 まずミックさんのサポートページからサンプルデータをもらってきましたが、 期間外に支払われた場合が存在しないのでちょっと付け足してみました。 サンプルデータ:Puzzle22 select * from Units; +------------+----------+ | complex_id | unit_nbr | +------------+----------+ | 32 | 1 | | 32 | 2 | | 32 | 3 | | 32 | 4 | +------------+----------+ select * from RentPayments; +-----------+----------+--------------+ | tenant_id | unit_nbr | payment_date | +-----------+----------+--------------+ | 1 | 1 | 2007-03-01 | | 1 | 4 | 2007-02-01 | +-----------+----------+--------------+ select * from Units; +------------+----------+ | complex_id | unit_nbr | +------------+----------+ | 32 | 1 | | 32 | 2 | | 32 | 3 | | 32 | 4 | +------------+----------+ まずは結合の内側から確認してみました。 SELECT * FROM Tenants T1 LEFT OUTER JOIN RentPayments RP1 ON T1.tenant_id = RP1.tenant_id; +-----------+----------+--------------+-----------+----------+--------------+ | tenant_id | unit_nbr | vacated_date | tenant_id | unit_nbr | payment_date | +-----------+----------+--------------+-----------+----------+--------------+ | 1 | 1 | NULL | 1 | 1 | 2007-03-01 | | 1 | 1 | NULL | 1 | 4 | 2007-02-01 | | 1 | 2 | NULL | 1 | 1 | 2007-03-01 | | 1 | 2 | NULL | 1 | 4 | 2007-02-01 | | 1 | 3 | 2007-01-01 | 1 | 1 | 2007-03-01 | | 1 | 3 | 2007-01-01 | 1 | 4 | 2007-02-01 | +-----------+----------+--------------+-----------+----------+--------------+ SELECT * FROM Tenants T1 LEFT OUTER JOIN RentPayments RP1 ON T1.tenant_id = RP1.tenant_id WHERE T1.unit_nbr = RP1.unit_nbr; +-----------+----------+--------------+-----------+----------+--------------+ | tenant_id | unit_nbr | vacated_date | tenant_id | unit_nbr | payment_date | +-----------+----------+--------------+-----------+----------+--------------+ | 1 | 1 | NULL | 1 | 1 | 2007-03-01 | +-----------+----------+--------------+-----------+----------+--------------+ 1 row in set (0.00 sec) 上の例では左外部結合の結果を示し、そのテーブルから部屋番号が共通するものを選択しています。明らかに左結合した部分が無駄になっている(汗、ていうかなにしたいかよくわかりません。 おかしなことになる原因は結合の条件であり、左結合するときの条件に部屋番号が一致する(T1.unit_nbr=RP1.unit_nbr)条件を入れる必要があります。 SELECT * FROM Tenants T1 LEFT OUTER JOIN RentPayments RP1 ON T1.tenant_id = RP1.tenant_id AND T1.unit_nbr=RP1.unit_nbr; +-----------+----------+--------------+-----------+----------+--------------+ | tenant_id | unit_nbr | vacated_date | tenant_id | unit_nbr | payment_date | +-----------+----------+--------------+-----------+----------+--------------+ | 1 | 1 | NULL | 1 | 1 | 2007-03-01 | | 1 | 2 | NULL | NULL | NULL | NULL | | 1 | 3 | 2007-01-01 | NULL | NULL | NULL | | 1 | 4 | NULL | 1 | 4 | 2007-02-01 | +-----------+----------+--------------+-----------+----------+--------------+ 4 rows in set (0.00 sec) そうすると借主が支払いをしていない部屋番号2と3はちゃんとpayment_dateがNULLになっています。 次に期間内に支払ったという条件を入れるのですが、このままでは期間内に支払ってない部屋が結果テーブルから消えてしまいます。 SELECT * FROM Tenants T1 LEFT OUTER JOIN RentPayments RP1 ON T1.tenant_id = RP1.tenant_id AND T1.unit_nbr=RP1.unit_nbr WHERE (RP1.payment_date = 2007-03-01 and RP1.payment_date 2007-03-31 ) or RP1.payment_date IS NULL; +-----------+----------+--------------+-----------+----------+--------------+ | tenant_id | unit_nbr | vacated_date | tenant_id | unit_nbr | payment_date | +-----------+----------+--------------+-----------+----------+--------------+ | 1 | 1 | NULL | 1 | 1 | 2007-03-01 | | 1 | 2 | NULL | NULL | NULL | NULL | | 1 | 3 | 2007-01-01 | NULL | NULL | NULL | +-----------+----------+--------------+-----------+----------+--------------+ 3 rows in set (0.00 sec) なので結合する前に絞っておきます。 SELECT * FROM Tenants T1 LEFT OUTER JOIN (SELECT * FROM RentPayments WHERE payment_date = 2007-03-01 and payment_date 2007-03-31 ) RP1 ON T1.tenant_id = RP1.tenant_id AND T1.unit_nbr=RP1.unit_nbr; +-----------+----------+--------------+-----------+----------+--------------+ | tenant_id | unit_nbr | vacated_date | tenant_id | unit_nbr | payment_date | +-----------+----------+--------------+-----------+----------+--------------+ | 1 | 1 | NULL | 1 | 1 | 2007-03-01 | | 1 | 2 | NULL | NULL | NULL | NULL | | 1 | 3 | 2007-01-01 | NULL | NULL | NULL | | 1 | 4 | NULL | NULL | NULL | NULL | +-----------+----------+--------------+-----------+----------+--------------+ 4 rows in set (0.00 sec) これで期間内に支払していない部屋番号4がちゃんと出てくるようになります。 というわけで答えは以下の通り。 SELECT * FROM Units U1 JOIN (Tenants T1 LEFT OUTER JOIN (SELECT * FROM RentPayments WHERE payment_date = 2007-03-01 and payment_date 2007-03-31 ) RP1 ON T1.tenant_id=RP1.tenant_id AND T1.unit_nbr=RP1.unit_nbr) ON U1.unit_nbr = T1.unit_nbr WHERE T1.vacated_date IS NULL ORDER BY U1.unit_nbr, RP1.payment_date; +------------+----------+-----------+----------+--------------+-----------+----------+--------------+ | complex_id | unit_nbr | tenant_id | unit_nbr | vacated_date | tenant_id | unit_nbr | payment_date | +------------+----------+-----------+----------+--------------+-----------+----------+--------------+ | 32 | 1 | 1 | 1 | NULL | 1 | 1 | 2007-03-01 | | 32 | 2 | 1 | 2 | NULL | NULL | NULL | NULL | | 32 | 4 | 1 | 4 | NULL | NULL | NULL | NULL | +------------+----------+-----------+----------+--------------+-----------+----------+--------------+ 3 rows in set (0.00 sec) fumikoさんの回答 2008年04月01日13時24分21秒.pdf 問題の意図がつかめなかったので、解答もちょっとむにゃむにゃになってしまったようです。 書籍の解答例を見て 回答例は1つしかなかったが、これだと期間外に支払があった場合のタプルがなくなってしまうのでは?(chiemin) ただしchieminの解答では現在借主がいない部屋が出てこない(chiaki) でも入居してないんだから出てこなくてもいいのでは(chiemin) とりあえず入居してない部屋も出てくるようにしてみた。 SELECT * FROM (Units U1 LEFT JOIN Tenants T1 ON U1.unit_nbr = T1.unit_nbr AND T1.vacated_date IS NULL AND U1.complex_id=32) LEFT OUTER JOIN (SELECT * FROM RentPayments WHERE payment_date= 2007-03-01 and payment_date 2007-03-31 ) RP1 ON T1.tenant_id=RP1.tenant_id AND U1.unit_nbr=RP1.unit_nbr ORDER BY U1.unit_nbr,RP1.payment_date; +------------+----------+-----------+----------+--------------+-----------+----------+--------------+ | complex_id | unit_nbr | tenant_id | unit_nbr | vacated_date | tenant_id | unit_nbr | payment_date | +------------+----------+-----------+----------+--------------+-----------+----------+--------------+ | 32 | 1 | 1 | 1 | NULL | 1 | 1 | 2007-03-01 | | 32 | 2 | 1 | 2 | NULL | NULL | NULL | NULL | | 32 | 3 | NULL | NULL | NULL | NULL | NULL | NULL | | 32 | 4 | 1 | 4 | NULL | NULL | NULL | NULL | +------------+----------+-----------+----------+--------------+-----------+----------+--------------+ 4 rows in set (0.00 sec) 現在入居者のいないunits_nbr=3の部屋も出てくるようになりました。 コメント 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/sqlpuzzle/pages/26.html
問題 SalesData 売上データ (district_nbr 地区番号, sales_person セールスマン, sales_id セールスID, sales_amt 売上高) 「各地域で上位3位の好成績を上げたセールスマンのレポートを作成する」 サンプルデータ: district_nbr | sales_person | sales_id | sales_amt --------------+-----------------+----------+----------- 1 | カーリー | 5 | 3.00 1 | ハーポ | 11 | 4.00 1 | ラリー | 1 | 50.00 1 | ラリー | 2 | 50.00 1 | ラリー | 3 | 50.00 1 | モー | 4 | 5.00 2 | ディック | 8 | 5.00 2 | フレッド | 7 | 5.00 2 | ハリー | 6 | 5.00 2 | トム | 7 | 5.00 3 | アーヴィン | 10 | 5.00 3 | メルヴィン | 9 | 7.00 4 | ジェニー | 15 | 20.00 4 | ジェシー | 16 | 10.00 4 | メアリー | 12 | 50.00 4 | オプラ | 14 | 30.00 4 | サリー | 13 | 40.00 yukaさんの回答 fumikoの回答 SQL文 CREATE VIEW ss (district_nbr,sales_person,sum_sales_amt) AS SELECT district_nbr,sales_person,sum(sales_amt)as sum_sales_amt FROM salesdata GROUP BY sales_person,district_nbr ORDER BY district_nbr ,sum_sales_amt desc CREATE VIEW ss2 (district_nbr,sales_person,sum_sales_amt) AS SELECT s1.district_nbr, s1.sales_person, (SELECT (case when count(s2.sum_sales_amt) = 0 then s1.sum_sales_amt when count(s2.sum_sales_amt) = 1 then s1.sum_sales_amt when count(s2.sum_sales_amt) = 2 then s1.sum_sales_amt else null end) FROM ss as s2 WHERE s1.sum_sales_amt s2.sum_sales_amt and s1.district_nbr = s2.district_nbr) as sum_sales_amt FROM ss as s1 GROUP BY s1.district_nbr,s1.sales_person,s1.sum_sales_amt ORDER BY s1.district_nbr,s1.sum_sales_amt desc) as ss2 SELECT district_nbr,sales_person,sum_sales_amt FROM ss2 WHERE sum_sales_amt IS NOT NULL 結果 district_nbr | sales_person | sum_sales_amt --------------+-----------------+--------------- 1 | ラリー | 150.00 1 | モー | 5.00 1 | ハーポ | 4.00 2 | ハリー | 5.00 2 | フレッド | 5.00 2 | ディック | 5.00 2 | トム | 5.00 3 | メルヴィン | 7.00 3 | アーヴィン | 5.00 4 | メアリー | 50.00 4 | サリー | 40.00 4 | オプラ | 30.00 考え ビュー作成:personごとに売上合計を集計したテーブル district_nbr | sales_person | sum_sales_amt --------------+-----------------+--------------- 1 | ラリー | 150.00 1 | カーリー | 3.00 1 | ハーポ | 4.00 1 | モー | 5.00 2 | フレッド | 5.00 2 | トム | 5.00 2 | ディック | 5.00 2 | ハリー | 5.00 3 | アーヴィン | 5.00 3 | メルヴィン | 7.00 4 | サリー | 40.00 4 | オプラ | 30.00 4 | ジェニー | 20.00 4 | ジェシー | 10.00 4 | メアリー | 50.00 相関副問い合わせ&自己結合自己結合 売上合計が一方より大きく、地区番号が等しいという条件で 例:地区番号1の場合 sales_person | sum_sales_amt | sales_person | sum_sales_amt -----------------+---------------+-----------------+--------------- ハーポ | 4.00 | ラリー | 150.00 ハーポ | 4.00 | モー | 5.00 カーリー | 3.00 | ハーポ | 4.00 カーリー | 3.00 | ラリー | 150.00 カーリー | 3.00 | モー | 5.00 モー | 5.00 | ラリー | 150.00 地区番号、セールスマンごとにグループ化しする count(s2.sales_person)が0~2の場合は上位三位である