BigQuery按年份分组统计login_log_id总数的SQL报错解决
问题原因
你写的SQL报错,是因为SELECT里的login_time以及从它派生的login_date、login_year、TIME(login_time)这些列,既没放到GROUP BY里,也没通过聚合函数处理——而你当前GROUP BY的是login_log_id,这完全偏离了“按年份统计总数”的需求。
正确实现代码
要按年份统计login_log_id的总数,你需要按提取出的年份分组,再用COUNT函数统计数量:
SELECT EXTRACT(YEAR FROM login_time) AS login_year, COUNT(login_log_id) AS total_login_logs FROM `steel-time-347714.flex.logs` GROUP BY login_year ORDER BY login_year; -- 可选:按年份排序,结果更直观
代码说明
EXTRACT(YEAR FROM login_time) AS login_year:从登录时间里提取年份,作为分组的依据COUNT(login_log_id) AS total_login_logs:统计每年的login_log_id总数(如果login_log_id不会为空,用COUNT(*)也能得到一样的结果)GROUP BY login_year:核心逻辑,按年份对数据分组ORDER BY login_year:可选步骤,让结果按年份升序排列,方便查看
如果你的数据里存在重复的login_log_id,需要统计每年不重复的数量,就把COUNT改成COUNT(DISTINCT login_log_id):
SELECT EXTRACT(YEAR FROM login_time) AS login_year, COUNT(DISTINCT login_log_id) AS unique_login_logs FROM `steel-time-347714.flex.logs` GROUP BY login_year ORDER BY login_year;
内容的提问来源于stack exchange,提问作者Mahima Lakra
相关产品推荐
相关产品推荐

