sql - 如何将 2 个 SQL 组合成一个 SQL
问题描述
表 C(id, type) 包含所有唯一客户 ID 的列表,包括交易和不交易。每个 id 都是唯一的,并且只有一个类型。
Table T(date, id, type, money) 是交易表,这里id不唯一。
表 C 的唯一 ID 比 T 中的多,因为并非所有客户端都在进行事务。
T 表中的唯一 id 是 C 表中 id 的子集。
T 表的每种类型的 AVG(money) 和 STD(money) 的 SQL:
SELECT
type,
AVG(money) AS avg_for_active_clients,
STDEV(money) AS stdev_for_active_clients,
COUNT(DISTINCT id) as cnt_active_clients
FROM (
SELECT id , type, sum(money) as money
FROM T
GROUP BY id, type
) A
GROUP BY type
用于 C 表的每种类型的 AVG(money) 和 STD(money) 的 SQL:
SELECT
type,
AVG(money) AS avg_for_all_clients,
STDEV(money) stdev_for_all_clients,
COUNT(DISTINCT id) as cnt_all_clients
FROM (
SELECT C.id, C.type , COALESCE(A.money, 0) as money FROM C
LEFT JOIN (
SELECT id , sum(money) as money
FROM T
GROUP BY id
) A
ON C.id = A.id
) B
GROUP BY type
是否可以将上面的 2 个 SQL 组合成单个 SQL?我的数据库是 Redshift。
解决方案
您可以将您的select #1
与您的select #2
垂直或水平相结合。
要垂直组合它们,您可以使用UNION ALL
. 例如:
select #1
union all
select #2
要水平组合它们,您可以使用FULL JOIN
. 例如:
select *
from (
select #1
) x
full join (
select #2
) y on y.type = x.type
推荐阅读
- r - 替换数据框中的单元格值
- cordova - 科尔多瓦插件权限在我的应用程序中不起作用
- javascript - this.props.function 不是函数 - React js
- node.js - 如何通过节点容器使用 mongoose 安全地连接到 mongo docker 容器以进行生产?
- indexing - 如何在 google bigtable 中创建 b-tree 索引
- json - 如何在 JSON API 中显示嵌套对象
- ios - 注册推送通知时 iPhone 应用程序崩溃
- sql - 获取分层表sql中每一行的级别
- python - 如何在 Python/Django 中使用埃塞俄比亚日历创建自定义日期字段
- php - 在 PHP 中对 JSON 文件中的值求和