質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

1198閲覧

同じクエリを何度も書かないようにしたいです。

pansaku

総合スコア1

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2020/04/28 09:00

編集2020/04/28 12:01

同じクエリを何度も書かないようにしたいです。

下記のコードを作成しましたが、「MY GOALS」「ENEMY GOALS」のソースと(追加分)のソース内で同じものがあるので、このクエリを省略したいです。

追加分で「MY GOALS」-「ENEMY GOALS」を出しています。

該当のソースコード

SELECT p1.kickoff, c1.name AS my_country, c2.name AS enemy_country, c1.ranking AS my_ranking, c2.ranking AS enemy_ranking, (SELECT COUNT(g1.id) FROM goals g1 WHERE p1.id = g1.pairing_id) AS my_goals, ( SELECT COUNT(g2.id) FROM goals g2 LEFT JOIN pairings p2 ON p2.id = g2.pairing_id WHERE p2.my_country_id = p1.enemy_country_id AND p2.enemy_country_id = p1.my_country_id ) AS enemy_goals, -- 追加ここから (SELECT COUNT(g1.id) FROM goals g1 WHERE p1.id = g1.pairing_id) - ( SELECT COUNT(g2.id) FROM goals g2 LEFT JOIN pairings p2 ON p2.id = g2.pairing_id WHERE p2.my_country_id = p1.enemy_country_id AND p2.enemy_country_id = p1.my_country_id ) AS goal_diff -- 追加ここまで FROM pairings p1 LEFT JOIN countries c1 ON c1.id = p1.my_country_id LEFT JOIN countries c2 ON c2.id = p1.enemy_country_id WHERE c1.group_name = 'C' AND c2.group_name = 'C' ORDER BY p1.kickoff, c1.ranking

試したこと

「my_goals」−「enemy_goals」とすると「Unknown columns」になってしまいました。

補足情報リンク内容

上のリンク内容の17の正解のソースのことです
my SQL A5:SQL mk-2 version8.0.19

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/28 09:16

質問を省略されても何のことだかさっぱりです。
pansaku

2020/04/28 09:37

ご意見ありがとうございます。 得失点差の算出に『my goals』『enemy goals』を求める長いクエリが記述されていて冗長です。 同じクエリを何回も書かないように訂正したいという内容でした。
m.ts10806

2020/04/28 09:40

想定するDBの種類、バージョンを記載してください。 でないと使える機能使えない機能ありますので。
pansaku

2020/04/28 09:43

my SQL A5:SQL mk-2 version2.14.5です。 よろしくお願いします
m.ts10806

2020/04/28 09:47

それはDB操作のツールであってDBそのものではないです。 MySQLならバージョン確認のクエリ発行して確認してください。
m.ts10806

2020/04/28 09:47

あと、タグとか環境情報とか質問本文に追加してください。
m.ts10806

2020/04/28 10:08

揚げ足取りたいわけではないです。 情報には正確性が大事だからです。 >versionなども下記のリンク通りで大丈夫です。 リンク先は「MariaDB 5.5.48」とあります。 MySQLのversion8.0.19だと全く別物ですよ。 正しい情報を記載してください。 また、マークダウン含めて質問内容がレイアウト崩れてしまってるので 投稿前にプレビュー確認して調整してください。
pansaku

2020/04/28 10:16

こちらの方こそ知識が足りておらず申し訳ございません。 versionは8.0.19です。
Orlofsky

2020/04/28 10:27

質問がどんどん破綻していく。 質問を修正するのは急がないから、いままで指摘されたことをきんちんと理解して直しては? お金を払って助っ人を呼んだほうが良いと思うけど。
pansaku

2020/04/28 15:23 編集

申し訳ありません勉強不足で 自分なりに全て訂正いたしました。
m.ts10806

2020/04/28 23:37

A5:SQL mk-2はDBを操作するツールの1つです。 MySQLはDBそのものです。 一緒にはできません。
Orlofsky

2020/04/29 07:53

[MySQL]と[my SQL]が違うことを認識できないようでは、プログラマーより[募る]と[募集]は違うと言い張るどこぞの愚かな国の総理に向いているかも?
pansaku

2020/04/29 12:31

申し訳ございません、時間を持て余してるのか分かりませんが、余計な一言やただ意味のないコメントをするなら無視していただけると助かります。
pansaku

2020/04/29 12:35

確かに知識不足なのは私の責任ですが、絶好の叩き相手にされるならとても不快です。
m.ts10806

2020/04/29 12:36

プログラムは書いた通りにしか動きません。 1字違えば当然動きません。それだけ繊細なものです。 「a」と「A」すら多くの言語や機能では別のものです。 大事なところなので何度も指摘するわけです。それを余計な一言と言い捨ててしまう人にできるアドバイスはないですよ。 解決する気なしと判断されます。
pansaku

2020/04/29 12:52

すみません他の見下すような発言に関してのものでした。
m.ts10806

2020/04/29 12:58

なるほど。半日たってようやくコメント入ったと思ってみたらガッカリしたもので。 別に Orlofskyさんは言い方は厳しいとはいえ、間違ったことは言ってないと思います。 開幕いきなり厳しく指摘したわけではないですしね。
pansaku

2020/04/29 13:05

そうですね申し訳ございませんでした。
guest

回答1

0

ベストアンサー

何かの問題集らしいので「もしかしたらこれで進むかも」程度のヒントだけ。
MySQL8だとWITH が使えるらしいので(参考:ドキュメント原文英語)、うまいことやれば短く・パフォーマンス向上も見込めるSQLになるのではないでしょうか。

投稿2020/04/29 13:29

編集2020/04/29 13:30
m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問