![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
グルーピング内で、あるカラムの最大値のレコードで絞り込む方法は、
以下のサイトで知ることができましたが。
http://www.yokablo.com/20120905717.html
tb_score
+-------+-------+-------+
| c_name | game | c_score |
+-------+-------+-------+
| 山田 | 高飛び | 90 |
+-------+-------+-------+
| 山田 | 徒競走 | 85 |
+-------+-------+-------+
| 山田 | 玉入れ | 90 |
+-------+-------+-------+
| 鈴木 | 徒競走 | 85 |
+-------+-------+-------+
| 鈴木 | 騎馬戦 | 50 |
+-------+-------+-------+
| 室伏 | 綱引き | 100 |
+-------+-------+-------+
| 室伏 | 玉入れ | 10 |
+-------+-------+-------+
SQL文:
SELECT * FROM tb_score
INNER JOIN ( SELECT c_name, MAX(c_score) AS MAXSCORE
FROM tb_score GROUP BY c_name ) AS TBDUMMY1
USING (c_name)
WHERE c_score = MAXSCORE
私の場合、t_score の親テーブル名`t_company`と、
子テーブル`t_items`がありまして、
以下のようなことをやりたかったのですが、エラーとなります。
上記SQL をサブクエリにします。
select * from (
SELECT *
FROM tb_score
INNER JOIN ( SELECT c_name, MAX( c_score ) AS MAXSCORE
FROM tb_score
GROUP BY c_name
) AS TBDUMMY1
USING ( c_name )
INNER JOIN t_company ON t_company.c_name = tb_score.c_name
WHERE c_score = MAXSCORE
) as T1
, t_items where T1.id_score = t_items.id_score
結果エラーメッセージは、
#1060 - Duplicate column name 'c_name'
でした。
エラー箇所が、
GROUP BY c_name か、
USING ( c_name ) か、
INNER JOIN t_company ON t_company.c_name = tb_score.c_name
なのか、分かりません。
SQL の規則としてやってはいけないことをやっていると想像してますが、
ご指摘・ご指導いただけると大変に助かります。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
今手元に環境がないので勘ですが…
SELECTで出そうとしているカラムの名前がダブっているだけだと思います。
t_itemsの構造がわかりませんが、多分table.T1を作っているサブクエリの中の「SELECT *」の部分で
*ではなく、一つづつカラムを指定してあげれば大丈夫かと。
ご回答ありがとうございます。
ご指摘のとおり、table.T1サブクエリの「SELECT *」のカラムを個別に指定して、エラーがなくなりました。
勉強になりました。
ありがとうございました。
No.2
- 回答日時:
深く考えすぎ
まず第一に選手ごとの最多点数を拾います。
select c_name,max(c_score) from tb_score group by c_name;
この条件にあう、選手とスコアの組み合わせをwhereで絞り込むだけです
select c_name,game,c_score from tb_score
where (c_name,c_score) in(select c_name,max(c_score) from tb_score group by c_name);
ご回答・アドバイスありがとうございます。
はい、複雑になってしまっております。
実際は、質問文で書いたSQL文は以下のように、サブクエリ内でWHERE句にもう1つ条件が追加されます。
select * from (
SELECT *
FROM tb_score
INNER JOIN ( SELECT c_name, MAX( c_score ) AS MAXSCORE
FROM tb_score
GROUP BY c_name
) AS TBDUMMY1
USING ( c_name )
INNER JOIN t_company ON t_company.c_name = tb_score.c_name
WHERE c_score = MAXSCORE
AND publish_date + INTERVAL duration DAY >= CURRENT_DATE
) as T1
, t_items where T1.id_score = t_items.id_score
t_company の`duration`カラムをWHERE句に使う為、
サブクエリ内で t_companyテーブルを結合させました。
ご提示いただいたSQL文、今後使って行こうと思います。
大変勉強になりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PostgreSQL SQLで検索結果の記事を表示したい 1 2022/04/28 21:03
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- 英語 Purpose: This study analyzed procedural results as 3 2022/11/17 21:03
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
使うべきでない文字。
-
SQL文で右から1文字だけ削除す...
-
phpmyadminはトリガーやIF文を...
-
sum()の出力結果順に並び替えを...
-
【MYSQL】asでリネームしてwher...
-
SQLの集計で「全て」の合計も表...
-
カウント結果を1レコードの中...
-
PHP+MySQL
-
MySQLチューニング
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
SELECTで1件のみ取得するには?
-
キーが同じを複数行を1行にま...
-
レコードが存在しなかった場合
-
GROUP BYを使ったSELECT文の総...
-
Accessで別テーブルの値をフォ...
-
select句副問い合わせ 値の個...
-
データセットのレコード更新が...
-
DataGridViewの、選択されてい...
-
SELECTの結果で同一行を複数回...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL文で右から1文字だけ削除す...
-
使うべきでない文字。
-
【MYSQL】asでリネームしてwher...
-
sum()の出力結果順に並び替えを...
-
初心者Mysqlの関数のsubstring...
-
SQLの集計で「全て」の合計も表...
-
割合(パーセント)を求めるに...
-
MySQL のデータからドロップダ...
-
チェックボックスの項目をDBにi...
-
【初歩】ラジオボタンをつかっ...
-
MySQLで MAX()とGROUP BYを使う...
-
カウント結果を1レコードの中...
-
phpmyadminはトリガーやIF文を...
-
月別、販売員別の集計がわかり...
-
replaceした上でwhere
-
今週の日曜日から土曜日までの...
-
サブクエリ内で INNER JOIN は
-
複数の表の条件でのDELETE文
-
姓名の前後を入れ替えるSQL命令...
-
mySQLでグループ別の順位を入力
おすすめ情報