Google Sheets使用GQL/QUERY按日期分组实现多列条件计数
问题原因
Google Query Language(GQL)不支持为SELECT子句中的单个聚合函数设置独立的WHERE过滤条件,WHERE子句的作用范围是整行查询数据,因此你尝试的多条件分开计数写法无法生效。
解决方案
利用布尔值TRUE等价于1、FALSE等价于0的运算规则,直接按日期分组对opened和clicked列求和即可实现需求,单公式写法如下(假设你的源数据为A:C列,首行为表头):
=QUERY(A:C, "SELECT TO_DATE(A), SUM(B), SUM(C) WHERE A IS NOT NULL GROUP BY TO_DATE(A) LABEL TO_DATE(A) 'date', SUM(B) 'count opened', SUM(C) 'count clicked'", 1)
补充说明
- 公式末尾的
1表示源数据包含1行表头,QUERY会自动跳过表头处理数据,若你的源数据无表头可修改为0 - 若你的时间戳存储在其他列(比如你提到的K列),只需把语句中的
A替换为对应的列号、调整数据范围即可 - 如果输出的日期列显示为时间戳格式,手动将该列的单元格格式设置为「日期」即可正常显示
- 如果你的
opened、clicked字段不是布尔类型,而是文本/数值标识,可使用CASE语句自定义条件:
=QUERY(A:C, "SELECT TO_DATE(A), SUM(CASE WHEN B='是' THEN 1 ELSE 0 END), SUM(CASE WHEN C='是' THEN 1 ELSE 0 END) WHERE A IS NOT NULL GROUP BY TO_DATE(A) LABEL TO_DATE(A) 'date', SUM(CASE WHEN B='是' THEN 1 ELSE 0 END) 'count opened', SUM(CASE WHEN C='是' THEN 1 ELSE 0 END) 'count clicked'", 1)
内容的提问来源于stack exchange,提问作者muw
相关产品推荐
相关产品推荐

