1440556157 MySQL


SQL文をお願いします。

nameとIDが同じレコードで、wageが最も高い物以外は削除する(重複は削除する)SQLをお願いします。

wageはfloat
IDはint
nameはvarchar

です

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2015/08/26 11:29:17
  • 終了:2015/09/02 11:30:03

回答(2件)

id:pogpi No.1

pogpi回答回数376ベストアンサー獲得回数502015/08/26 12:08:52

ポイント50pt

SELECT name,id,MAX(wage) AS maxwage FROM tablename GROUP BY name,id

で、どうですか。

id:webtomake

削除(DELETE)する場合にはどうすれば良いでしょうか?

2015/08/26 13:49:35
id:pogpi

取得したname,id,maxwageを使って、
DELETE FROM tablename WHERE name = (name) AND id = (id) AND wage < (maxwage)
ですね。

2015/08/26 14:36:17
id:kagasu No.2

kagasu回答回数5ベストアンサー獲得回数12015/08/27 11:58:16

ポイント50pt

DELETE FROM table_name WHERE wage < (SELECT MAX(wage) FROM table_name)

  • id:taknt
    厳密にいうと 質問にあるとおりのSQLではないが、ま、それは質問が 正しく記述されてないだけかな。
  • id:rouge_2008
    次のようにすると希望の結果になります。
    データ比較用にテーブルを結合して、取得した対象レコードを削除します。

    DELETE T1 FROM `tablename` AS T1,
    (
    SELECT name, id, MAX( wage ) AS maxwage
    FROM `tabelname`
    GROUP BY name, id
    ) AS T2
    WHERE T1.name = T2.name
    AND T1.id = T2.id
    AND T1.wage < T2.maxwage

    ※最大値のレコードが複数あった場合、それらはすべて残ります。


    ・MySQL 5.6 リファレンスマニュアル :: 13 SQL ステートメントの構文 :: 13.2 データ操作ステートメント :: 13.2.2 DELETE 構文
    http://dev.mysql.com/doc/refman/5.6/ja/delete.html
    -----------------------------------------------
    注記
    テーブルのエイリアスを宣言した場合は、テーブルを参照するときにそのエイリアスを使用する必要があります。

    DELETE t1 FROM test AS t1, test2 WHERE ...

    複数テーブルの DELETE 内のテーブルエイリアスは、そのステートメントの table_references 部分でのみ宣言するようにしてください。それ以外の場所では、エイリアス参照が許可されますが、エイリアス宣言は許可されません。
    -----------------------------------------------

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません