根据条件选择和计数

Roc*_*nja 2 postgresql

我有两个表,proj: id nameproj_reports: id, position, created_at, key_id, proj_id我想从选择key_reports每个proj_id

- total number of `key_id` which can be done with `count(.key_id)`
- total number of DISTINCT `key_id` `count(DISTINCT .key_id)`
- total number of `key_id` where `position` > 1
- total number of `key_id` where `position` > 2 AND < 5
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我不知道如何添加这些条件来检查位置是 > 或 < 一个数字还是在一个范围内。

efe*_*sar 6

您可以在 COUNT 聚合函数中使用 CASE 表达式。

SELECT
    COUNT( CASE WHEN position > 1 THEN key_id ELSE NULL END ) AS GT1,
    COUNT( CASE WHEN position > 2 AND position < 5 THEN key_id ELSE NULL END ) AS GT2LT5,
FROM
     proj_reports
Run Code Online (Sandbox Code Playgroud)

COUNT 聚合不计算 NULL 值,所以这就是它起作用的原因。

这是一个演示该概念的 SQL Fiddle