使い方によっては思い通りの結果が得られないことに注意してくださいGROUP BY
。MySQLはその機能を拡張します。で選択されている列を常に指定したい場合GROUP BY
:
SELECT col1, col2, AGGREGATE(col3)
FROM table
GROUP BY col1, col2
重複を見つけるすべての行を選択する必要があります
MAX
それぞれの金額を見つけるにはuser
:
SELECT user,
Max(amount) AS amount
FROM invoices
GROUP BY user
金額が最も高い行のみを保持します
オプション1
を使用しますLEFT JOIN
(JW に感謝):
DELETE invoices
FROM invoices
LEFT JOIN
(SELECT user, MAX(amount) AS amount
FROM invoices
GROUP BY user) j
ON j.user = invoices.user
AND j.amount = invoices.amount
WHERE j.amount IS NULL
http://sqlfiddle.com/#!2/ce2f8/1
オプション 2
ステージング テーブルを作成します。
CREATE TABLE invoices (
user int,
amount decimal(5,2));
INSERT INTO invoices VALUES
(1, 100.00),
(1, 200.00),
(1, 300.00);
CREATE TABLE invoicesStg (
user int,
amount decimal(5,2));
INSERT INTO invoicesStg
(SELECT user, MAX(amount) AS amount
FROM invoices
GROUP BY user);
TRUNCATE invoices;
INSERT INTO invoices
SELECT user, amount
FROM invoicesStg;
DROP TABLE invoicesStg;
http://sqlfiddle.com/#!2/0381e/1