我有一个mysql数据库,其中包含带有以下列的表:PartCode,价格和数量。目标是编写一个查询,该查询将搜索具有重复的“ PartCode”的行,然后按“价格”和“数量”进行比较,并删除“价格”值较高的行,但是如果“数量”之一为0,则返回删除数量为0的那个。
A sample table would look like this:
PartCode - Price - Quantity
ABCD - 5 - 2
CDEF - 6 - 1
CDEF - 4 - 1
VZXY - 8 - 4
VZXY - 7 - 0
.... - ... - ...
And for the results, I'd like to get this:
PartCode - Price - Quantity
ABCD - 5 - 2
CDEF - 4 - 1
VZXY - 8 - 4
.... - ... - ...
我找到了接收所有重复的PartCode的解决方案:
SELECT `PartCode` FROM `Table` GROUP BY `PartCode` HAVING COUNT(*) > 1
我无法弄清楚的是,如何通过其他列比较来实现删除重复项之一的实现。
提前致谢。
最佳答案
以下查询将从数量最多的每个PartCode
组中删除一条记录,或者如果一条记录的数量为零,则将其删除。
DELETE
FROM yourTable t1
WHERE (PartCode, Quantity) IN
(
SELECT
t.PartCode,
t.qty
FROM
(
SELECT
PartCode,
CASE WHEN MIN(Quantity) = 0 THEN MIN(Quantity) ELSE MAX(Quantity) END AS qty
FROM yourTable
GROUP BY PartCode
HAVING COUNT(*) > 1
) t
)