SQL部分重复

SQL部分重复,sql,duplicates,Sql,Duplicates,我有这张桌子: 我的初始表包含一些重复项: Product_id Product_Name Price_Per_Kg ----------------------------------------- 1 Banana 0.0 1 Banana 0.25 2 Strawberry 0.0 3 Coconut

我有这张桌子:

我的初始表包含一些重复项:

Product_id   Product_Name   Price_Per_Kg
-----------------------------------------
    1        Banana              0.0
    1        Banana              0.25
    2        Strawberry          0.0
    3        Coconut             0.10
如果同一记录的每千克价格高于0.0,我想删除该记录的值为0.0:

Product_id   Product_Name   Price_Per_Kg
-----------------------------------------
    1        Banana              0.25
    2        Strawberry          0.0
    3        Coconut             0.10
如何在SQL中实现这一点?

试试下面的方法

选择产品标识、产品名称、最大值(每千克价格)
从产品
按产品id、产品名称分组


但是,如果有多个非0.0 kg的值,则需要什么?

您可以将查询编写为:

select P.Product_id,P.Product_Name, P.Price_Per_Kg
from @Product P
where exists
(select * from 
   @Product P1 
   where P.Product_id = P1.Product_id
   group by P1.Product_Name,P1.Product_id
   having max(P1.Price_Per_Kg)< = P.Price_Per_Kg)
选择P.Product\u id、P.Product\u Name、P.Price\u Per\u Kg
来自@productp
哪里有
(从中选择*
@产品P1
其中P.Product\u id=P1.Product\u id
按P1分组。产品名称,P1。产品id
最大值(P1.价格单位/千克)<=P.价格单位/千克)

使用
不存在
如下:

select * from Product p 
where p.Price_Per_Kg > 0
or ( 
  p.Price_Per_Kg = 0
  and not exists (
    select 1 from Product
    where Product_id = p.Product_id and Price_Per_Kg > 0
  )  
)
请参阅。

您可以使用ROW_NUMBER()函数。查询将返回价格最高的行 每种产品

   SELECT * FROM 
   (
   SELECT 
    ProductID,
    ProductName,
    Price_per_Kg,
    ROW_NUMBER()OVER(PARTITION BY ProductID ORDER BY Price_per_Kg DESC) AS RowNumber
   FROM
   Product
   )Product_Dedupe 
   WHERE RowNumber=1

delete
语句是特定于供应商的。请用您正在使用的数据库标记您的问题:mysql、oracle、sql server…?向我们展示您迄今为止尝试了什么?
   SELECT * FROM 
   (
   SELECT 
    ProductID,
    ProductName,
    Price_per_Kg,
    ROW_NUMBER()OVER(PARTITION BY ProductID ORDER BY Price_per_Kg DESC) AS RowNumber
   FROM
   Product
   )Product_Dedupe 
   WHERE RowNumber=1