sql - 如何获得命名内部联接的不同计数?
问题描述
我已经为信息汇总表构建了一个查询,它几乎就在那里,但有一个小错误。如果一个班级有多个用户,该confirmed_class_count
变量返回得太高,导致我相信这个数字并不明显
这是我当前的代码:
SELECT "staffs".*,
count(distinct subclasses) as class_count,
sum(case when users.confirmed_at is not null then 1 else 0 end) confirmed_class_count
FROM
staffs
INNER JOIN classes as subclasses on staffs.staff_id = ANY(subclasses.staff)
INNER JOIN "classes_users" ON "classes_users"."class_id" = "subclasses"."id"
INNER JOIN "users" ON "users"."id" = "classes_users"."user_id"
INNER JOIN class_types ON class_types.code = subclasses.class_type_code
WHERE
(subclasses.closed_date is NULL OR subclasses.closed_date > '2019-09-06')
GROUP BY
staffs.id ORDER BY "staffs"."full_name" ASC
我想用类似的sum
东西替换,(select distinct count(*) from subcases where users.confirmed_at is not null) as confirmed_case_count
但我得到了relation "subclasses" does not exist
.
我如何在这里得到我想要的东西?
解决方案
您可以将 count distinct 与条件聚合一起使用。代替
sum(class when users.confirmed_at is not null then 1 else 0 end) confirmed_class_count
^ looks like a typo, this should be case not class
和
count(distinct case when users.confirmed_at is not null then classes_users.class_id end) confirmed_class_count
推荐阅读
- docker - 使用基础镜像 node:10.0.0 添加 tcpdump docker 镜像
- c# - IIS 8.5:托管 32 位 ASP.NET MVC5 网站和 64 位 .netcore2.2 网站时出现问题
- r - 错误 - 在 R 中拟合截断的对数正态分布
- python - 为什么我在 Heroku 上收到意外错误代码 H14?
- data-structures - 图可以有孤立的顶点吗?
- powershell - 如何使用 Powershell 删除现有的 Word Doc 水印?
- javascript - 比较两个对象数组之间的值
- fluentd - 根据特定单词过滤登录/注销日志条目(grep 过滤器插件)
- r - 返回向量中最后一个 NA 之后的值
- c# - 使用对象 C# 的异步命名管道