我有一个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
)

09-27 01:06