个别查询与整体查询

时间:2018-05-25 00:43:59

标签: sql

我会尝试尽可能具有描述性,但它可能仍然有点模糊。无论如何,它就在这里。

数据由64个变量和数百万个观测值组成。 64中的重要变量是: Call_ID,Phone_Number,Risk_Score,Fraud_Status和EntryTimestamp

对于每个单独的呼叫,可能存在多个风险评分,欺诈状态和输入时间戳,但只能有一个呼叫ID和一个电话号码。

不同的欺诈状态是: 1.'' 2.'欺诈' 3.'正版' 4.'未知' 5.'不确定'

所以我想编写一个查询来计算所有上述欺诈状态的所有唯一调用以及Risk_Score< 80和EntryTimestamp< ' 2018-04-20 18:00:00.000'。换句话说,我想要计算在2014年4月20日下午5点之前发生的所有独特电话,这些电话的欺诈状态为''和Risk_Score< 80,
然后,我想计算在2014年4月20日下午5点之前发生的所有独特电话,这些电话的欺诈状态为“欺诈”。和Risk_Score< 80,等等。

我认为以下内容可行:

SELECT DISTINCT Call_ID
FROM DATA
WHERE EntryTimestamp < '2018-04-20 18:00:00.000' AND CAST(Risk_Score AS 
      FLOAT) < 80 AND Fraud_Status = ''

导致2,732,453行

SELECT DISTINCT Call_ID
FROM DATA
WHERE EntryTimestamp < '2018-04-20 18:00:00.000' AND CAST(Risk_Score 
      AS FLOAT) < 80 AND Fraud_Status = 'Fraud'

导致1,007行

SELECT DISTINCT Call_ID
FROM DATA
WHERE EntryTimestamp < '2018-04-20 18:00:00.000' AND CAST(Risk_Score 
      AS FLOAT) < 80 AND Fraud_Status = 'Genuine'

导致1,659行

SELECT DISTINCT Call_ID
FROM DATA
WHERE EntryTimestamp < '2018-04-20 18:00:00.000' AND CAST(Risk_Score 
      AS FLOAT) < 80 AND Fraud_Status = 'Unknown'

导致3,433行

SELECT DISTINCT Call_ID
FROM DATA
WHERE EntryTimestamp < '2018-04-20 18:00:00.000' AND CAST(Risk_Score AS 
      FLOAT) < 80 AND Fraud_Status = 'Inconclusive'

导致30行

总行数:2,732,453 + 1,007 + 1,659 + 3,433 + 30 = 2,738,582

但所有这些查询的总行数不会累加到以下查询中的行:

SELECT DISTINCT Call_ID
FROM DATA
WHERE EntryTimestamp < '2018-04-20 18:00:00.000' AND CAST(Risk_Score AS 
      FLOAT) < 80

导致2,733,076行

应包含所有先前查询的行。有谁知道为什么这种方法不起作用? 如果您需要更多信息,请与我们联系。谢谢!

1 个答案:

答案 0 :(得分:0)

您正在计算不同的ID。一些call_ids匹配多个条件。 - 戈登林诺夫

谢谢@GordonLinoff。在考虑了你的评论一段时间后,它终于点击了!这是查找总呼叫的最后一个查询错误。我应该相信所有单个查询的总和,以及具有risk_score&lt;的所有调用的总数。 80.0。