mysql按列A搜索重复项,并按列上的条件删除

时间:2017-08-30 08:31:48

标签: mysql duplicates criteria

我有一个mysql数据库,包含一个包含以下列的表:PartCode,Price和Quantity。目标是编写一个查询,搜索具有重复' PartCode'的行,然后按价格和数量进行比较,并删除具有更高' Price'值,但如果其中一个'数量'是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
 ....     -   ...   -    ...

我找到了接收所有重复PartCodes的解决方案:

SELECT `PartCode` FROM `Table` GROUP BY `PartCode` HAVING COUNT(*) > 1

我无法弄清楚的是,如何通过其他列比较来实现删除其中一个重复项。

提前致谢。

1 个答案:

答案 0 :(得分:0)

以下查询将删除具有最高数量的每个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
)