首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL查询,查找重复的记录和折扣,从有条件的计数和

SQL查询,查找重复的记录和折扣,从有条件的计数和
EN

Stack Overflow用户
提问于 2020-06-01 03:15:34
回答 3查看 187关注 0票数 0

我正在使用下面的SQL查询来计数记录。我想在我数完后再给重复的testID打折扣。

示例:

代码语言:javascript
运行
复制
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和姓名复本的记录。

总数=6-2=4

我知道有不同的查询,我可以使用,但是我不知道如何使用2列来创建条件,当重复时不要对它们进行计数。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-01 03:20:36

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

代码语言:javascript
运行
复制
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

请注意,您应该将列名限定为它们所属的表,以使查询更加清晰,并避免歧义。另一个选项是连接这些列并使用count(distinct)。您需要选择不出现在串连字符串中的分隔符,以避免“假”重复:

代码语言:javascript
运行
复制
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,然后使用count()

代码语言:javascript
运行
复制
select count(*) cnt
from (
    select distinct testid, name 
    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
) t
票数 1
EN

Stack Overflow用户

发布于 2020-06-01 03:18:49

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

代码语言:javascript
运行
复制
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

现有的查询充当表表达式,但使用DISTINCT TESTID, NAME代替DISTINCT TESTID, NAME

票数 1
EN

Stack Overflow用户

发布于 2020-06-01 04:33:24

如果只是count对您很重要,那么只需在TESTID, NAME上使用GROUP BY,然后计算查询中的行数,如下所示:

代码语言:javascript
运行
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62125158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档