我会尽量描述,但它可能仍然有点模糊。不管怎么说,它开始了。
数据由64个变量和数百万次观测组成。64中的重要变量是: Call_ID、Phone_Number、Risk_Score、Fraud_Status和EntryTimestamp。
对于每个电话,可以有多个风险分数、欺诈状态和输入时间戳,但只能有一个呼叫ID和一个电话号码。
不同的欺诈状态是: 1. '‘2。“欺诈”3。‘'Genuine’4。“未知”5。“无定论”
因此,我想写一个查询来统计所有唯一的调用,每一个以上的欺诈状态和一个Risk_Score < 80和EntryTimestamp < '2018-04-20 18:00:00.000‘。换句话说,我想统计一下2018年4月20日下午5点之前发生的所有欺诈状态为“”和Risk_Score < 80的独特电话,
然后,我想数数所有在2018年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行
它应该包含前面所有查询的行。有人知道为什么这种方法行不通吗?如果你需要更多的信息,请告诉我。谢谢!
发布于 2018-05-30 20:58:12
您正在计算不同的ids。有些call_ids匹配多个条件。-戈登·林诺夫
谢谢你@GordonLinoff。想想你的评论一段时间后,它终于点击了!这是最后一个查找总调用错误的查询。对于risk_score < 80.0的调用总数,我应该信任所有单个查询的总和。
https://stackoverflow.com/questions/50520000
复制相似问题