虹裏img歴史資料館 - imgの文化を学ぶ

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

  • iOSアプリ 虹ぶら AppStoreで無料配布中
  • たすけ... のスレッド詳細

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

    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 22/12/09(金)22:35:22 [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の情報書いてくんない? そもそも正規化されてないテーブルにどの環境でも実行できるように書いたらこうなるわけなんだけど