如何从数据库按条件统计各国停留总天数?
问题描述
给定如下数据库表格结构及数据:
| DATE | AMOUNT | COUNTRY | CITY |
|---|---|---|---|
| 12/02/2023 | 23.9 | BRASIL | RIO DE JANEIRO |
| 13/02/2023 | 3.9 | BRASIL | RIO DE JANEIRO |
| 14/02/2023 | 2.9 | BRASIL | SAO PAULO |
| 15/02/2023 | 10.0 | BRASIL | CURITIBA |
| 16/02/2023 | 71.3 | BRASIL | CURITIBA |
| 17/02/2023 | 22.2 | PARAGUAY | ASUNCION |
需要统计每个国家的停留天数,例如巴西的停留天数为3(推测此处指不同城市的停留天数,以下提供多种常见场景的公式解决方案)。尝试过QUERY、DATEDIFF等函数但未解决,希望通过公式实现,不使用手动筛选功能。
解决方案
场景1:统计每个国家的唯一日期数量(实际停留天数,重复日期算1天)
使用QUERY函数分组统计唯一日期:
=QUERY(A:D, "SELECT C, COUNT(DISTINCT A) WHERE C <> '' GROUP BY C LABEL COUNT(DISTINCT A) '停留天数'", 1)
A:D为数据所在列范围COUNT(DISTINCT A)统计每个国家对应的不重复日期数GROUP BY C按国家分组聚合结果
场景2:统计每个国家首次到末次停留的间隔天数(含首尾当天)
结合MINIFS、MAXIFS和DATEDIFF实现:
=ARRAYFORMULA(QUERY({C:C, DATEDIFF(MINIFS(A:A, C:C, C:C), MAXIFS(A:A, C:C, C:C), "D")+1}, "SELECT Col1, MAX(Col2) WHERE Col1 <> '' GROUP BY Col1 LABEL MAX(Col2) '停留天数'", 1))
MINIFS/MAXIFS分别提取每个国家的最早、最晚停留日期DATEDIFF(..., ..., "D")+1计算间隔天数(+1是为了包含首尾两天)ARRAYFORMULA实现批量计算
场景3:匹配示例输出(统计每个国家的不同城市停留数)
若示例中巴西的3天指不同城市的停留数量,使用以下公式:
=QUERY(A:D, "SELECT C, COUNT(DISTINCT D) WHERE C <> '' GROUP BY C LABEL COUNT(DISTINCT D) '停留天数'", 1)
COUNT(DISTINCT D)统计每个国家对应的不重复城市数量,匹配示例中巴西3个城市的结果
内容的提问来源于stack exchange,提问作者AngeloMerkel
相关产品推荐
相关产品推荐

