sql - 如何获得命名内部联接的非重复计数?

标签 sql postgresql count inner-join

我已经为信息汇总表构建了一个查询,它几乎完成了,但有一个小错误。如果一个类(class)有多个用户,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

我想用 (select distinct count(*) from subcases where users.confirmed_at is not null) as confirmed_case_count 替换 sum 但我得到 关系“子类”不存在

我怎样才能得到我想要的东西?

最佳答案

您可以将非重复计数与条件聚合结合使用。替换

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

关于sql - 如何获得命名内部联接的非重复计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57827140/

相关文章:

postgresql - 如何将值插入 jsonb 列中的 key[]?

sql - MS Access 中的简单 SQL COUNT 查询

JQuery 子级数

mysql - 使用 MySQL 案例条件在使用计数和分组依据的查询中创建列

sql - 我应该如何保持准确记录汇总多个表格?

sql - 我可以在一条语句中多次迭代更新单个列吗?

mysql - 在mysql中显示查询结果中的全文

php - 无法从 php 调用 sql 连接

javascript - 如何将 2 个 postgres 数据库连接到我的应用程序?

java - 如何解决 org.postgresql.jdbc.PgConnection.createClob() 尚未实现