SQL 子查询 PostgreSQL 12

SQL subqueries PostgreSQL 12

我有一个 table 类似于:

第一 最后 日期 位置
约翰 母鹿 18-03-2021
哈里斯 陶工 10-06-2021
约翰 母鹿 10-05-2021
哈里斯 陶工 14-06-2021
杰西卡 陶工 14-06-2021
克米特 福斯特

使用案例如下:

要获得 covid 证书的资格,某些人必须:

我正在尝试编写 return 我的查询: totalDose, totalRequieredDose

例如:

第一 最后 总剂量 总需要剂量
约翰 母鹿 2 2
哈里斯 陶工 1 1
杰西卡 陶工 1 2
克米特 福斯特 0 2

由于 Jessica Potter 已经接种了疫苗但没有提交日期,她必须接种 2 次疫苗。 所以价值 1/2 Kermit foster 没有 pos 值,他是 0/2 等等

我正在绞尽脑汁写一个查询(或 pl/sql),它可以 return 我 table.

有人可以给我一些提示吗?

我们可以按名字和姓氏汇总。总剂量只是非 NULL 疫苗接种日期的计数。对于所需的总剂量数,我们可以从值 2 开始。假设 pos 列存在非 NULL 日期,则该值可以被 1 抵消,表明给定的人在某些时候检测呈阳性。

SELECT
    first,
    last,
    COUNT(date) AS totalDoses,
    2 - (COUNT(*) FILTER (WHERE pos IS NOT NULL) > 0)::int AS totalRequieredDoses
FROM yourTable
GROUP BY
    first,
    last
ORDER BY
    COUNT(date) DESC,
    first,
    last;

Demo