如何通过两个不同的子句同时查询两个字段的计数?

Posted

技术标签:

【中文标题】如何通过两个不同的子句同时查询两个字段的计数?【英文标题】:How to query the count of two fields by two different clauses at the same time? 【发布时间】:2019-12-11 22:04:06 【问题描述】:

我想查询 WHERE 子句 1 的计数和 WHERE 子句 2 的另一个计数。我的预订应用程序有一个简化的查询结果:

Token   Pending    OverDue
---------------------------------
ITB001    1          23
IASFSA    8          4
WERSFD    7          1
XVCSFD    2          11
RERSDF    2          7
XVCLKD    1          8
MKB114    1          11

我想要总共 3 列,首先是一个名为 Token 的字段,其次是由 renter 分组的 Pending 的计数,最后是由 renter 分组的计数 Overdue 字段。

对于Token 的查询和Pending 的计数,我为具有endDate(又名截止日期)的任何项目设置了比今天晚1 天的子句:

SELECT token, COUNT(renter) FROM booking WHERE endDate >= CAST (current_date + 1 AS timestamp) AND endDate <  CAST (current_date + 2 AS timestamp) GROUP BY renter, token

第二列将是一个类似的查询,但 endDate 比今天的日期晚 1 天。如何同时通过renter查询PendingOverdue组的计数?

【问题讨论】:

什么是租户?我在您的示例数据中没有看到此列。 renter 是数据库中唯一的字段之一。您在表中看不到它,因为我不需要检索它。我只希望它用于对查询结果进行分组。将renter 视为唯一的序列号 这还不清楚。您将 both 列定义为 endDate 比今天的日期晚 1 天的租用者的计数。 【参考方案1】:

这是你想要的吗?

SELECT token, COUNT(*),
       SUM(CASE WHEN enddate = current_date + interval '1 day' THEN 1 ELSE 0 END)
FROM booking 
GROUP BY token;

您的数据库标签不一致,但我使用类似 Postgres 的语法进行日期操作。

【讨论】:

谢谢。我正在使用node-postgres 这样可以解释它

以上是关于如何通过两个不同的子句同时查询两个字段的计数?的主要内容,如果未能解决你的问题,请参考以下文章

需要查询两个字段的不同组合,以及出现不同组合的计数

mysql如何同时查询一个字段的两个不同值的数据的最后一条数据

如何在两个表之间执行JOIN后计算不同部门的成员数量?

如何同时查询SQLServer数据库中两个结构完全相同的数据表中的同一字段的值?

SQL合并两个具有不同列号的选择查询,同时删除重复项?

两个相似查询的巨大速度差异(MySQL ORDER 子句)