sql - SQL Distinct 具有多个条件
问题描述
我想根据SampleData Table & Output生成一个表输出。我的 SQL 查询如下,但它没有给我最后三列的正确结果
SELECT
UserLogin,
COUNT(DISTINCT consumerID) AS TotalUniqueconsumerIDs,
COUNT(DISTINCT (CASE
WHEN ActivitiesCompleted > 0 AND QuizCompleted <= 0 THEN consumerID END)) AS YesActivityNoQuiz,
COUNT(DISTINCT (CASE
WHEN ActivitiesCompleted <= 0 AND QuizCompleted > 0 THEN consumerID END)) AS NoActivityYesQuiz,
COUNT(DISTINCT (CASE
WHEN ActivitiesCompleted >= 1 AND QuizCompleted >= 1 THEN consumerID END)) AS YesActivityYesQuiz
FROM
TableName
GROUP BY
UserLogin
非常感谢任何帮助。
更多信息:
也许我上面不清楚,所以在这里提供更多信息:
我创建了另一个示例表,其中只有 1 个 UserLogin 的数据,看起来像这样,如果我在 Excel 中从外部旋转这个示例数据集,我会看到这个
如您所见,此表中的 consumerID 的此透视屏幕截图都有超过 1 个 ActivitiesCompleted 和 1 QuizCompleted。
基于我上面的查询的 SQL 输出如下所示
但是,根据 Pivot 屏幕截图,我期待 YesActivityYesQuiz 列中的 1 和 YesActivityNoQuiz 和 NoActivityYesQuiz 中的零
样本数据:
Date,UserLogin,consumerID,ActivitiesCompleted,QuizCompleted
6/8/2018,aasufhar,consumerA,0,1
6/8/2018,aasufhar,consumerA,0,0
6/8/2018,aasufhar,consumerA,1,0
6/8/2018,aasufhar,consumerA,1,0
6/8/2018,aasufhar,consumerA,1,0
6/8/2018,aasufhar,consumerA,1,0
6/8/2018,aasufhar,consumerA,1,0
6/8/2018,aasufhar,consumerA,1,0
6/8/2018,aasufhar,consumerA,1,0
6/8/2018,aasufhar,consumerA,2,0
6/8/2018,aasufhar,consumerA,1,0
6/8/2018,aasufhar,consumerA,1,0
6/8/2018,aasufhar,consumerA,1,0
6/8/2018,aasufhar,consumerA,0,0
6/8/2018,aasufhar,consumerA,0,0
6/8/2018,aasufhar,consumerA,0,0
6/8/2018,aasufhar,consumerA,0,0
6/8/2018,aasufhar,consumerA,0,0
6/8/2018,aasufhar,consumerA,0,0
6/8/2018,aasufhar,consumerA,0,0
6/8/2018,aasufhar,consumerA,0,0
6/8/2018,aasufhar,consumerA,0,0
6/8/2018,aasufhar,consumerA,0,0
6/8/2018,aasufhar,consumerA,0,0
6/8/2018,aasufhar,consumerB,0,1
6/8/2018,aasufhar,consumerB,0,0
6/8/2018,aasufhar,consumerB,2,0
6/8/2018,aasufhar,consumerB,1,0
6/8/2018,aasufhar,consumerB,1,0
6/8/2018,aasufhar,consumerB,1,0
6/8/2018,aasufhar,consumerB,0,0
6/8/2018,aasufhar,consumerB,0,0
6/8/2018,aasufhar,consumerB,0,0
6/8/2018,aasufhar,consumerB,0,0
6/8/2018,aasufhar,consumerB,0,0
解决方案
有问题的查询对我来说似乎是正确的(至少它返回了预期结果中显示的内容)
不过,我可以提出它的不那么冗长的版本(BigQuery 标准 SQL)
#standardSQL
SELECT UserLogin,
COUNT(DISTINCT consumerID) AS TotalUniqueconsumerIDs,
COUNT(DISTINCT IF(ActivitiesCompleted > 0 AND QuizCompleted <= 0, consumerID, NULL)) AS YesActivityNoQuiz,
COUNT(DISTINCT IF(ActivitiesCompleted <= 0 AND QuizCompleted > 0, consumerID, NULL)) AS NoActivityYesQuiz,
COUNT(DISTINCT IF(ActivitiesCompleted >= 1 AND QuizCompleted >= 1, consumerID, NULL)) AS YesActivityYesQuiz
FROM TableName
GROUP BY UserLogin
根据 OP 最近的示例/解释更新查询
#standardSQL
SELECT UserLogin,
COUNT(DISTINCT consumerID) AS TotalUniqueconsumerIDs,
COUNT(DISTINCT IF(ActivitiesCompleted > 0 AND QuizCompleted <= 0, consumerID, NULL)) AS YesActivityNoQuiz,
COUNT(DISTINCT IF(ActivitiesCompleted <= 0 AND QuizCompleted > 0, consumerID, NULL)) AS NoActivityYesQuiz,
COUNT(DISTINCT IF(ActivitiesCompleted >= 1 AND QuizCompleted >= 1, consumerID, NULL)) AS YesActivityYesQuiz,
COUNT(DISTINCT IF(ActivitiesCompleted <= 0 AND QuizCompleted <= 0, consumerID, NULL)) AS NoActivityNoQuiz
FROM (
SELECT UserLogin,consumerID,
SUM(ActivitiesCompleted) ActivitiesCompleted,
SUM(QuizCompleted) QuizCompleted
FROM TableName
GROUP BY UserLogin,consumerID
)
GROUP BY UserLogin
推荐阅读
- python - 如何在多种条件下过滤字符串 python pandas
- kendo-ui - KendoReportViewer JS 升级问题
- python-3.x - 以下这些作业有什么区别?
- angularjs - HTML div 未更新
- docker - docker 卷不会持续存在
- python - 如何将模块永久添加到我的烧瓶应用程序?
- java - Spring batch 2.2 IteamReader by page
- reactjs - React Axios 将窗口来源附加到提供的 Url (json-server)
- sql-server - SQL Server 中的条件 IN 子句
- python - 应用于滚动数据帧太慢(熊猫 0.23.4)