虹裏img歴史資料館

ここでは虹裏imgのかなり古い過去ログを閲覧することができます。新しいログはこちらにあります

22/12/09(金)21:47:40 たすけ... のスレッド詳細

削除依頼やバグ報告は メールフォーム にお願いします。個人情報、名誉毀損、侵害等については積極的に削除しますので、 メールフォーム より該当URLをご連絡いただけると助かります。

画像ファイル名:1670590060222.jpg 22/12/09(金)21:47:40 No.1002297555

たすけて 学校で組・名前・教科・点数の列を持つテーブルがあったとき、各教科ごとにB組の中で最も高い点数を取った子のレコードを出したい 自分で書くなら教科ごとの最高点を予め集計して元のテーブルと内部結合、みたいな書き方かなって思うんだけどもっとスマートな方法あるのかな

1 22/12/09(金)21:50:11 No.1002298796

どれが1テーブルなんだ

2 22/12/09(金)21:51:20 No.1002299303

ここはエンジニア歴21年の俺に任せろ

3 22/12/09(金)21:52:14 No.1002299637

学校の課題かな

4 22/12/09(金)21:52:33 No.1002299778

学校の宿題かよ

5 22/12/09(金)21:52:53 No.1002299904

すごく学校の課題臭がする

6 22/12/09(金)21:53:29 No.1002300211

お題が学校なのが学校の課題感をさらに高める

7 22/12/09(金)21:53:44 No.1002300306

>B組の中で最も高い点数 >教科ごとの最高点を予め集計 内部結合した後集計だ

8 22/12/09(金)21:54:58 No.1002300885

GROUPBYとMAXすら習わなかったのか授業起きてたか?

9 22/12/09(金)21:55:00 No.1002300895

ウィンド関数を使え

10 22/12/09(金)21:56:52 No.1002301772

ChatGPTにそのままの文章で投げてみよう

11 22/12/09(金)21:56:56 No.1002301796

複数人いるかもしれないから一回B組の最高点を出してからそれと同じ点数の奴を引っ張ってくるかな

12 22/12/09(金)21:57:23 No.1002302007

知恵袋と同レベルの掲示板…ってこと!?

13 22/12/09(金)21:57:46 No.1002302178

内部結合するより

14 22/12/09(金)21:58:01 No.1002302288

>ChatGPT こいつマジで賢いな… 理解して答えを出しやがった

15 22/12/09(金)21:59:00 No.1002302734

書き込みをした人によって削除されました

16 22/12/09(金)22:00:09 No.1002303225

>知恵袋と同レベルの掲示板…ってこと!? 大喜利の質は知恵袋以下じゃない?

17 22/12/09(金)22:00:11 No.1002303240

>内部結合した後集計だ やっぱりそうなるかありがとう >複数人いるかもしれないから一回B組の最高点を出してからそれと同じ点数の奴を引っ張ってくるかな 同点は頭になかったやありがとう 大体イメージ付いたこれで授業にもついていけるよ 残りはみんなのお悩み相談所にしていいよ

18 22/12/09(金)22:01:00 No.1002303637

最初のテーブルが正規化されてないよね 分離してBC正規形にしよう

19 22/12/09(金)22:01:01 No.1002303646

ガキはもっとまともな掲示板へ行け

20 22/12/09(金)22:02:38 No.1002304381

テーブルの資料画像貼って貰わないとよくわからん…

21 22/12/09(金)22:03:41 No.1002304845

B組には何百万人くらい居るの?

22 22/12/09(金)22:05:58 No.1002305893

実務的会話やめぇ!

23 22/12/09(金)22:06:27 No.1002306083

これって今は高校とかでやるの?俺の学生時代にこんなの習わなかった

24 22/12/09(金)22:06:45 No.1002306212

女子小学生かな?

25 22/12/09(金)22:08:30 No.1002307088

RDBMSはなんなんだよー

26 22/12/09(金)22:09:07 No.1002307365

>これって今は高校とかでやるの?俺の学生時代にこんなの習わなかった 情報学科の学生とかじゃね流石に

27 22/12/09(金)22:09:24 No.1002307512

正直解決するだけなら2秒でできるけど高速化するならどうなるんだこれ

28 22/12/09(金)22:10:38 No.1002308082

内容と取ってくる値のしょうもなさで学校の課題臭いなと思ったら学校の課題だった

29 22/12/09(金)22:13:49 No.1002309550

SQLわかんね

30 22/12/09(金)22:14:05 No.1002309667

速度優先かコードの見た目優先かで結構変わるヤツだ 学校レベルのレコード数なら見た目優先で良さそうだが

31 22/12/09(金)22:14:57 No.1002310078

>女子小学生かな? 手取り足取り教えますよ

32 22/12/09(金)22:15:58 No.1002310537

こういうとき実際のデータ出してもらわないとクエリが書けない

33 22/12/09(金)22:16:17 No.1002310696

>速度優先かコードの見た目優先かで結構変わるヤツだ 上の内部結合ってのはどっちなん

34 22/12/09(金)22:17:47 No.1002311324

MySQLにWINDOW関数なんて高度な関数ありませぇぇぇん!

35 22/12/09(金)22:18:01 No.1002311439

今の少子化の学校くらいの人数なら速度は気にしなくていいかもな

36 22/12/09(金)22:19:02 No.1002311945

>>速度優先かコードの見た目優先かで結構変わるヤツだ >上の内部結合ってのはどっちなん 国産DB じゃなければ仕事で使っても良い

37 22/12/09(金)22:19:52 No.1002312340

>MySQLにWINDOW関数なんて高度な関数ありませぇぇぇん! 再帰クエリ書けるようになったのさえつい最近だからな…

38 22/12/09(金)22:19:54 No.1002312352

なんも考えてないで作ると意外と遅くなるから ちゃんと速度や軽さ考慮しないとダメじゃね?

39 22/12/09(金)22:20:50 No.1002312775

>なんも考えてないで作ると意外と遅くなるから >ちゃんと速度や軽さ考慮しないとダメじゃね? それも金で解決出来るとこはあるからな…

40 22/12/09(金)22:21:38 No.1002313156

MySQLは置いてきた ハッキリ言って付いていけない

41 22/12/09(金)22:21:42 No.1002313198

>MySQLにWINDOW関数なんて高度な関数ありませぇぇぇん! MySQLにもWindow関数はあるよ! 8.0から!!

42 22/12/09(金)22:21:45 No.1002313217

4桁もいかないオーダーなら速度なんてミリ秒でしか変わらん

43 22/12/09(金)22:22:27 No.1002313538

PL/SQLで作れば ええ!

44 22/12/09(金)22:22:27 No.1002313539

一万人規模でも工夫せずに1秒切るだろ

45 22/12/09(金)22:22:45 No.1002313646

>PL/SQLで作れば >ええ! 頼むから死んでくれ

46 22/12/09(金)22:22:50 No.1002313683

そもそもちゃんとデータは登録されるのか?

47 22/12/09(金)22:23:10 No.1002313837

1テーブルに組・名前・教科・点数の列があるなら耐えられない

48 22/12/09(金)22:23:14 No.1002313865

この場合って一度テーブル全部読んでそこから最大値求めてからもう一回全部読んで一致するもの抽出…だけど効率としてはこれでいいのか分かんないからSQL詳しい人に聞きたい

49 22/12/09(金)22:23:22 No.1002313918

しかしこんなとこで課題内容相談しちゃうの凄いな…

50 22/12/09(金)22:23:23 No.1002313922

>MySQLにもWindow関数はあるよ! >8.0から!! マジで知らなかった まぁ俺の現場では5.6がバリバリ現役で動いてるんだけどな!

51 22/12/09(金)22:24:34 No.1002314372

俺は実データと実クエリでEXPLAINの結果を見ないとなんとも言えないマン

52 22/12/09(金)22:24:36 No.1002314388

そこまで大量のデータ扱うこと無いから今んとこどうにかなってるけどビックデータ扱う事になったらどうすりゃいいとか全然わかんないんだよな…

53 22/12/09(金)22:25:11 No.1002314646

SQL全然分からない

54 22/12/09(金)22:25:12 No.1002314648

5.6なら一応セーフ寄りだと思うけど俺の感覚合ってるのかはわからん

55 22/12/09(金)22:25:46 No.1002314893

>そこまで大量のデータ扱うこと無いから今んとこどうにかなってるけどビックデータ扱う事になったらどうすりゃいいとか全然わかんないんだよな… Bigquery使えばTB級のフルスキャンしても10秒ぐらいで結果返ってくるので お金がかかること以外はマジで最強だよ

56 22/12/09(金)22:26:55 No.1002315348

そもそも設計がミスってる気がする

57 22/12/09(金)22:27:21 No.1002315572

>>MySQLにWINDOW関数なんて高度な関数ありませぇぇぇん! >再帰クエリ書けるようになったのさえつい最近だからな… 高度もなにも20年近く前に規格化されたのを今まで放っておいたの?ひどすぎない?

58 22/12/09(金)22:27:52 No.1002315808

>Bigquery使えばTB級のフルスキャンしても10秒ぐらいで結果返ってくるので >お金がかかること以外はマジで最強だよ 1TBのフルスキャンするクエリでも5ドルだから無駄に繰り返さなければマジで安いんだよね まあフラットレート契約するけどね

59 22/12/09(金)22:28:02 No.1002315887

恥ずかしくて聞けないんだけどMYSQLってなんで5.7からいきなり8.0に飛んでるんだ…?

60 22/12/09(金)22:29:38 No.1002316615

MySQLって割りとレガシーなんだ 知らなかった…ぞうさんのほうがイケメンなんだ…

61 22/12/09(金)22:30:26 No.1002316929

>恥ずかしくて聞けないんだけどMYSQLってなんで5.7からいきなり8.0に飛んでるんだ…? MySQL6.0があったけどリリースされなかった MySQL7.0はClusterとバージョン番号がぶつかる という理由で8.0に飛んだらしい

62 22/12/09(金)22:30:34 No.1002316983

>この場合って一度テーブル全部読んでそこから最大値求めてからもう一回全部読んで一致するもの抽出…だけど効率としてはこれでいいのか分かんないからSQL詳しい人に聞きたい テーブル全部読むなら並び変えりゃ一発で仕分けられる値に変換できるでしょうが

63 22/12/09(金)22:31:29 No.1002317440

>恥ずかしくて聞けないんだけどMYSQLってなんで5.7からいきなり8.0に飛んでるんだ…? ちょっと検索したらOracleが買収する前に6系の開発をしていてMySQL Clusterが7系のバージョンを持っていたから8に飛んだという回答を見た

64 22/12/09(金)22:33:18 No.1002318277

windowsだって8.1から10に飛んだしよくあること

65 22/12/09(金)22:33:34 No.1002318380

>>この場合って一度テーブル全部読んでそこから最大値求めてからもう一回全部読んで一致するもの抽出…だけど効率としてはこれでいいのか分かんないからSQL詳しい人に聞きたい >テーブル全部読むなら並び変えりゃ一発で仕分けられる値に変換できるでしょうが そういえばそうか…ソートが何故か重い処理だと変な勘違いしてたよありがとう

66 22/12/09(金)22:33:49 No.1002318483

select name,MAX(point) from table where class='B' and subject='math' group by name , max union select name,MAX(point) from table where class='B' and subject='language' group by name , max みたいな書き方されてるのを見たことがある 教科増えたらどうすんのさ!

67 22/12/09(金)22:34:14 No.1002318658

>No.1002316929 >No.1002317440 ありがたい…結構ガバガバなんだな…

68 22/12/09(金)22:34:27 No.1002318729

MySQLはシンプルなSQLのサブセットを実行するためのシンプルなエンジンなことに価値があったけど本当のSQLってのは複雑なものなんだ

69 22/12/09(金)22:34:45 No.1002318844

>みたいな書き方されてるのを見たことがある >教科増えたらどうすんのさ! 教科増えた時に勝手に増えると困る場合もあるからそれはそれでよくね?

70 22/12/09(金)22:35:01 No.1002318962

>教科増えたらどうすんのさ! そんときゃUNION追加するまでさ!

71 <a href="mailto:ChatGPT">22/12/09(金)22:35:22</a> [ChatGPT] No.1002319105

そのようなタスクを実現するためには、まず各教科を列挙し、それぞれについてB組の中で最も高い点数を取った子のレコードを抽出する必要があります。そのためには、以下のようなSQLクエリを使用することができます。 SELECT class, name, subject, MAX(score) AS max_score FROM students WHERE class = 'B' GROUP BY subject; 上記のクエリでは、classが'B'であるすべての学生のレコードを抽出し、subjectごとに集計し、各教科ごとに最も高い点数を持つ学生のレコードを返します。 ただし、上記のクエリは実際には動作しない可能性があります。実際の動作については、データベースに接続して実行する必要があります。また、上記のクエリはあくまで例であり、実際のニーズに合わせて適宜修正する必要があります。

72 22/12/09(金)22:35:47 No.1002319281

Oracle以外ほとんど使ったことなくてポスグレとか使ったとき頭抱える

73 22/12/09(金)22:36:46 No.1002319660

>Oracle以外ほとんど使ったことなくてポスグレとか使ったとき頭抱える 空文字はNULLなんだろ!?

74 22/12/09(金)22:36:55 No.1002319726

>Oracle以外ほとんど使ったことなくてポスグレとか使ったとき頭抱える INNER JOIN ONとか書かないよねOracle使ってると SQLServerとかいじる時もちょっと手が止まる

75 22/12/09(金)22:38:09 No.1002320231

>みたいな書き方されてるのを見たことがある 1回だけテーブルスキャンして判定すりゃよさそうなことをunion使って複数回同じテーブルスキャンしてるの見るとイラッっとする

76 22/12/09(金)22:39:30 No.1002320751

UNIONよりサブクエリを多用してる

77 22/12/09(金)22:39:47 No.1002320875

select * from t where class = 'b' and subject = 'math' and score = (select max(score) from t where subject = 'math' and class = 'b') これをunionで教科の数だけつなげようぜ!

78 22/12/09(金)22:39:53 No.1002320921

>>Oracle以外ほとんど使ったことなくてポスグレとか使ったとき頭抱える >空文字はNULLなんだろ!? Oracleだけしかやってない人ってnullの意味わかって無くてダメだったってなることがある

79 22/12/09(金)22:40:27 No.1002321188

SQL覚えろって言われたとき微妙に仕様が違うからどれ覚えればいいのか分かんなくなる

80 22/12/09(金)22:40:45 No.1002321300

>Oracleだけしかやってない人ってnullの意味わかって無くてダメだったってなることがある それはnullが悪いよnullが

81 22/12/09(金)22:41:00 No.1002321435

select A.名前,A.教科,A.点数 from そのテーブル as A inner join (select 教科,MAX(点数) as 最高得点 from そのテーブル where 組=B組 group by 教科 ) as B on A.教科 = B.教科 and A.点数 = B.最高得点 各クラスごとに最高得点出したい場合はwhere 組=B組を消してgroup byと結合条件に加えればいいとおもう

82 22/12/09(金)22:41:15 No.1002321554

>select * from t where class = 'b' and subject = 'math' and >score = (select max(score) from t where subject = 'math' and class = 'b') >これをunionで教科の数だけつなげようぜ! 見てるだけで地獄みたいなクエリだ

83 22/12/09(金)22:41:56 No.1002321870

Oracle Databaseは現在、長さが0(ゼロ)の文字値をNULLとして処理します。ただし、将来のリリースではこの処理が変更される場合があるため、空の文字列をnullと同じように処理しないことをお薦めします。

84 22/12/09(金)22:42:11 No.1002321973

>>Oracleだけしかやってない人ってnullの意味わかって無くてダメだったってなることがある >それはnullが悪いよnullが null使うな2値論理でイキッってろって言いたい

85 22/12/09(金)22:42:51 No.1002322309

いかがでたしブログみたいな感じで普通に有益なSQL教えてるブログあるしyoutubeもあるし勉強するのかなり楽ね最近

86 22/12/09(金)22:43:39 No.1002322649

UNION死ね

87 22/12/09(金)22:44:29 No.1002322995

>>これをunionで教科の数だけつなげようぜ! >見てるだけで地獄みたいなクエリだ VIEWにこういうの入れる人がいてマジ困る UTで問題なかったのにITやSTでデータ量増えたとたん動かなくなってプログラム組んだ俺のせいにされときの屈辱は今でも忘れられない

88 22/12/09(金)22:46:47 No.1002323968

実務言い出すと学校なら総数たかが知れてるしエクセルでやればええ!ってならない?

89 22/12/09(金)22:46:50 No.1002323991

一学年の生徒数なんて3桁人程度だから非効率なクエリ書いてもええ!

90 22/12/09(金)22:47:13 No.1002324199

>各クラスごとに最高得点出したい場合はwhere 組=B組を消してgroup byと結合条件に加えればいいとおもう だから並び変えて値毎に仕分けりゃ済むことのために同じテーブルを何回もスキャンするんじゃねぇ!

91 22/12/09(金)22:47:14 No.1002324203

UNIONなんてよほどじゃない限り使うことないだろ…

92 22/12/09(金)22:47:27 No.1002324293

>実務言い出すと学校なら総数たかが知れてるしエクセルでやればええ!ってならない? エクセルは素晴らしいツールだよ

93 22/12/09(金)22:47:39 No.1002324382

Excelならやり方のイメージつくんだが

94 22/12/09(金)22:50:35 No.1002325738

>だから並び変えて値毎に仕分けりゃ済むことのために同じテーブルを何回もスキャンするんじゃねぇ! じゃあRDBMSの情報書いてくんない? そもそも正規化されてないテーブルにどの環境でも実行できるように書いたらこうなるわけなんだけど

↑Top