如何通过两个不同的子句同时查询两个字段的计数?
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
查询Pending
和Overdue
组的计数?
【问题讨论】:
什么是租户?我在您的示例数据中没有看到此列。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如何同时查询一个字段的两个不同值的数据的最后一条数据