sql - 在一个引用另一个子查询中的表的子查询中添加 where 条件 (ANSI SQL)
问题描述
在子查询“二”中,我想添加一个基于子查询“一”中的列的 where 条件,也就是说,我想 WHERE one."Call Type" = 'Demo'
在我的第二个子查询中添加,但这给了我一个别名错误。基本上,在“二”中,我只想要表“一”中给出的调用类型=演示的那些行的计数(最终目标是找到代码中提到的两个计数的比率)。关于如何实现这一点的任何建议?
SELECT
COALESCE(one.Period, two.Period) AS Period,
one.TotalDemos,
two.TotalTrials,
Round(100.0 * one.TotalDemos / two.TotalTrials, 2) AS percentage
FROM ( SELECT
"Call Date" AS Period,
COUNT(*) AS TotalDemos
FROM "customer_calls"
WHERE "Call Type" = 'Demo'
GROUP BY Period
) AS one
FULL OUTER JOIN( SELECT
"modified" AS Period,
COUNT(*) AS TotalTrials
FROM "users"
WHERE "customertype" = 0
GROUP BY Period
) AS two ON one.Period = two.Period
编辑 - 我的期间值是日期戳(日期 - 时间),而我想要按年而不是按天的聚合或比率/百分比。不知道如何在这里使用合并来完成。对此的任何帮助也会很棒。
解决方案
根据您提供的表定义,您可以使用Common Table Expressions (CTE)实现您所追求的目标。下面的查询提供的示例。
Period
但是,我们不建议您尝试仅通过 来确定已进行演示调用的用户。如果我的假设Period
是日期/时间持续时间,那么您的查询很可能无法达到您想要的效果(即您将获得来自查询的记录,这些记录不会是演示调用)。为了使查询精确,您必须确定实际表之间的连接customer_calls
以及users
查询是否有效。
另外,另一个小警告,我通常不建议使用FULL OUTER JOIN
它,因为它会返回两个表中的每条记录,这意味着你会有很多你不想要的记录(即one
不加入的行two
反之亦然)。INNER JOIN
假设您非常了解数据库/表结构就足够了。
;WITH [one] AS (
SELECT
"Call Date" AS Period,
COUNT(*) AS TotalDemos
FROM "customer_calls"
WHERE "Call Type" = 'Demo'
GROUP BY Period
), [two] AS (
SELECT
"modified" AS Period,
COUNT(*) AS TotalTrials
FROM "users"
WHERE "customertype" = 0
AND Period IN (SELECT Period FROM [one])
GROUP BY Period
)
SELECT
COALESCE(one.Period, two.Period) AS Period,
one.TotalDemos,
two.TotalTrials,
Round(100.0 * one.TotalDemos / two.TotalTrials, 2) AS percentage
FROM one
FULL OUTER JOIN two
ON one.Period = two.period
推荐阅读
- java - Javers Spring 在保存到历史记录期间设置特定字段数据
- amazon-ec2 - CodeDeploy allowTraffic 失败,但我的代码仍部署在实例上
- c# - 尝试在实体框架中添加迁移时出现“在程序集中找不到 DbContext”错误
- python-3.x - 我如何从网站“flipkart.com”上抓取评论
- sql - 在将数据批量插入表时从文件中删除引号字符
- javascript - Handlebars 使用模板渲染 html
- php - 在同一个 PHP 函数中创建条件语句
- android - 如何设计 tabitems,而不将它们放在 .xml 文件中
- python - 如何制作具有一定滞后的两个时间序列的相关图
- reactjs - 如何遍历firebase中的所有节点