我正在使用下面的SQL查询来计数记录。我想在我数完后再给重复的testID打折扣。
示例:
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列来创建条件,当重复时不要对它们进行计数。
发布于 2020-06-01 03:20:36
有些数据库(即MySQL)支持count(distinct)
中的列列表,因此您只需执行以下操作:
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)
。您需要选择不出现在串连字符串中的分隔符,以避免“假”重复:
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()
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
发布于 2020-06-01 03:18:49
您可以重用现有的查询。例如:
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
。
发布于 2020-06-01 04:33:24
如果只是count
对您很重要,那么只需在TESTID, NAME
上使用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;
https://stackoverflow.com/questions/62125158
复制相似问题