SQL查询以查找重复记录,并从带有条件和

SQL查询以查找重复记录,并从带有条件和,sql,join,group-by,count,Sql,Join,Group By,Count,我使用下面的SQL查询来统计记录。我想在拿到数量后,再给复制的睾丸打折扣 例如: select count (*) from PRODUCT MP join PRODUCT_UOM pu on pu.PRODUCT_KEY = mp.PRODUCT_KEY join UOM u on u.UOM_ID = pu.UOM_ID join PRODUCT_BARCODE pb on pb.PRODUCT_UOM_KEY = pu.PRODUCT_UOM_KEY 查询选择*时的ex

我使用下面的SQL查询来统计记录。我想在拿到数量后,再给复制的睾丸打折扣

例如:

select count (*) from PRODUCT MP
   join PRODUCT_UOM pu on pu.PRODUCT_KEY = mp.PRODUCT_KEY
   join UOM u on u.UOM_ID = pu.UOM_ID
   join PRODUCT_BARCODE pb on pb.PRODUCT_UOM_KEY = pu.PRODUCT_UOM_KEY
查询选择*时的excel数据如下所示:

我想对TESTID和NAME重复的记录打折

总数=6-2=4


我知道我可以使用不同的查询,但我不确定如何使条件具有2列,当重复时,则不计算它们。

您可以重用现有查询。例如:

select count(*) from (
  select distinct testid, name 
  from PRODUCT MP
  join PRODUCT_UNIT pu on pu.PRODUCT_KEY = mp.PRODUCT_KEY
  join UNITu on u.UNIT_ID = pu.UNIT_ID
  join PRODUCT_BAR pb on pb.PRODUCT_UNIT_KEY = pu.PRODUCT_UNIT_KEY
) x

现有查询充当表表达式,但可以用不同的TESTID、NAME替换COUNT*。

您可以重用现有查询。例如:

select count(*) from (
  select distinct testid, name 
  from PRODUCT MP
  join PRODUCT_UNIT pu on pu.PRODUCT_KEY = mp.PRODUCT_KEY
  join UNITu on u.UNIT_ID = pu.UNIT_ID
  join PRODUCT_BAR pb on pb.PRODUCT_UNIT_KEY = pu.PRODUCT_UNIT_KEY
) x

您现有的查询充当一个表expresison,但您可以用DISTINCT TESTID、NAME替换COUNT*。

一些数据库,即MySQL支持countdistinct中的列列表,因此您只需执行以下操作:

select count(testid, name) cnt
from product mp
join product_uom pu on pu.product_key = mp.product_key
join uom u on u.uom_id = pu.uom_id
join product_barcode pb on pb.product_uom_key = pu.product_uom_key
请注意,您应该使用列名所属的表来限定列名,以使查询更清晰并避免歧义。 另一个选项是连接列并使用countdistinct。您需要选择一个分隔符,该分隔符不会出现在要连接的字符串中,以避免假重复:

select count(distinct concat(testid, '###', name)) cnt
from product mp
join product_uom pu on pu.product_key = mp.product_key
join uom u on u.uom_id = pu.uom_id
join product_barcode pb on pb.product_uom_key = pu.product_uom_key
您还可以在子查询中使用distinct,然后计数:


有些数据库,即MySQL,支持countdistinct中的列列表,因此您只需执行以下操作:

select count(testid, name) cnt
from product mp
join product_uom pu on pu.product_key = mp.product_key
join uom u on u.uom_id = pu.uom_id
join product_barcode pb on pb.product_uom_key = pu.product_uom_key
请注意,您应该使用列名所属的表来限定列名,以使查询更清晰并避免歧义。 另一个选项是连接列并使用countdistinct。您需要选择一个分隔符,该分隔符不会出现在要连接的字符串中,以避免假重复:

select count(distinct concat(testid, '###', name)) cnt
from product mp
join product_uom pu on pu.product_key = mp.product_key
join uom u on u.uom_id = pu.uom_id
join product_barcode pb on pb.product_uom_key = pu.product_uom_key
您还可以在子查询中使用distinct,然后计数:

如果只是计数对您很重要,您可以简单地在TESTID上使用GROUP BY,命名,然后按如下方式计算该查询中的行数:

SELECT count(t.*) from (

   select * from PRODUCT MP
   join PRODUCT_UNIT pu on pu.PRODUCT_KEY = mp.PRODUCT_KEY
   join UNIT u on u.UNIT_ID = pu.UNIT_ID
   join PRODUCT_BAR pb on pb.PRODUCT_UNIT_KEY = pu.PRODUCT_UNIT_KEY

   GROUP BY TESTID, NAME
) t;
如果只是计数对您很重要,您可以简单地在TESTID上使用GROUP BY,命名,然后按如下方式计算该查询中的行数:

SELECT count(t.*) from (

   select * from PRODUCT MP
   join PRODUCT_UNIT pu on pu.PRODUCT_KEY = mp.PRODUCT_KEY
   join UNIT u on u.UNIT_ID = pu.UNIT_ID
   join PRODUCT_BAR pb on pb.PRODUCT_UNIT_KEY = pu.PRODUCT_UNIT_KEY

   GROUP BY TESTID, NAME
) t;


您可以显示预期输出吗?您可以显示预期输出吗?SQL错误[102][S0001]:“cnt”附近的语法不正确。@user12158726:答案中有三个查询,您使用哪一个?注意,我修改了它们?选择CountId,名称来自产品mp的cnt加入产品\计量单位pu上。产品\计量单位密钥=mp.product\计量单位密钥加入计量单位u上u.uom\标识=pu.uom\标识加入产品\条码pb上pb.product\计量单位密钥=pu.product\计量单位_key@user12158726:计数前缺少右括号。请按照我的回答中给出的方式运行查询,我修复了这两个问题。选择countdistinct concatDRUG_CODE,缩写cnt from product mp join product_uom pu on pu.product_key=mp.product_key join uom u on u.uom_id=pu.uom_id join product_barcode pb on pb.product_uom_key=pu.product_uom_keySQL错误[102][S0001]:cnt附近的语法不正确。@user12158726:答案中有三个查询,您使用的是哪一个?注意我修改了它们?选择countid,名称来自产品mp的cnt加入产品\计量单位pu上。产品\计量单位密钥=mp.product\计量单位密钥加入计量单位u上u.uom\标识=pu.uom\标识加入产品\条码pb上pb.product\计量单位密钥=pu.product\计量单位_key@user12158726:计数前缺少右括号。请按照我的回答中给出的查询运行我修复了两者之间的问题。选择countdistinct concatDRUG_CODE,缩写为cnt from product mp join product_uom pu on pu.product_key=mp.product_key join uom u on u.uom_id=pu.uom_id join product_barcode pb on pb.product_uom_key=pu.product_uom_keySQL错误[156][S0001]:关键字“select”附近的语法不正确。请从select distinct DRUG_CODE中选择count*,来自产品MP的缩写\名称加入产品\计量单位pu上的pu。产品\密钥=MP。产品\密钥加入计量单位u上的u。计量单位ID=pu。计量单位ID加入产品\条码pb上的pb。产品\计量单位密钥=pu。产品\计量单位_KEY@user12158726您错过了子查询和表别名周围的错误[156][S0001]:关键字“select”附近的语法不正确。请从select distinct DRUG_CODE中选择count*,来自产品MP的缩写\名称加入产品\计量单位pu上的pu。产品\密钥=MP。产品\密钥加入计量单位u上的u。计量单位ID=pu。计量单位ID加入产品\条码pb上的pb。产品\计量单位密钥=pu。产品\计量单位_KEY@user12158726您错过了子查询和表别名SQL Error[102][S0001]:靠近“*”的语法不正确。SQL Error[102][S0001]:靠近“*”的语法不正确。