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