有没有一种方法可以同时使用DISTINCT和COUNT(*)来防止代码对DUPLICATE条目的攻击?

时间:2019-07-09 18:34:03

标签: sql ssms aggregate-functions

昨天我得到了一个函数的帮助,该函数可以根据多个条件/列正确获取一列中多个项目的计数。但是,如果有一种方法可以基于聚合的GROUP BY语句获取表中所有条目的DISTINCT计数。

    SELECT      TIME = ap.day,
                acms.tenantId,
                acms.CallingService,
                policyList = ltrim(sp.value),
                policyInstanceList = ltrim(dp.value),
                COUNT(*) AS DISTINCTCount
    FROM        dbo.acms_data acms
    CROSS APPLY string_split(acms.policyList, ',') sp
    CROSS APPLY string_split(acms.policyInstanceList, ',') dp
    CROSS APPLY (select day = convert(date, acms.[Time])) ap
    GROUP BY    ap.day, acms.tenantId, sp.value, dp.value, acms.CallingService

我想知道是否有办法查看是否可以同时使用DISTINCT和Count(*),以及是否会影响我的结果,从而使该算法无法复制条目,因此可以找到一种解决方法。

我必须使用COUNT(*)的原因是因为我基于表中的每一列进行汇总,而不仅仅是特定的列或多列。

1 个答案:

答案 0 :(得分:2)

我们可以将DISTINCT与COUNT一起使用。

USE AdventureWorks2012
GO
-- This query shows 290 JobTitle 
SELECT COUNT(JobTitle) Total_JobTitle 
FROM [HumanResources].[Employee]
GO
-- This query shows only 67 JobTitle 
SELECT COUNT( DISTINCT JobTitle) Total_Distinct_JobTitle
FROM [HumanResources].[Employee]
GO

enter image description here