You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake中如何正确使用COUNT DISTINCT统计月度登录用户数

问题分析与修正方案

1. 核心语法错误

原查询中distinct count(user_name)的写法不符合Snowflake(及标准SQL)语法规范。正确统计去重值数量的写法是count(distinct user_name)——必须将distinct放在count()的括号内部,作用于要统计的字段,否则会触发语法错误或得到非预期结果。

2. 时间分组优化建议

针对你提到的event_timestamp相关问题,直接用year()和month()拆分时间可能存在时区偏差或边界值问题(比如跨时区的日期拆分后,月份归属不符合业务预期)。建议使用date_trunc('month', event_timestamp)直接截断到月份作为分组依据,既能保证分组准确性,还能简化查询逻辑。

修正后的查询

select 
    'Spain' as "COUNTRY"
    , 'Snowflake' as "TECHNOLOGY"
    , year(date_trunc('month', event_timestamp)) as "YEAR"
    , month(date_trunc('month', event_timestamp)) as "MONTH"
    , 'USERS_LOGIN' as "KIND"
    , count(distinct user_name) as "AMOUNT" 
from snowflake.account_usage.login_history 
group by date_trunc('month', event_timestamp)
order by "YEAR", "MONTH";

调整说明:

  • 修正count(distinct)语法,确保统计每个月的唯一登录用户数
  • 用date_trunc('month', event_timestamp)作为分组键,避免时间拆分导致的归属错误
  • 从截断后的月份日期中提取年和月,保证与分组逻辑完全一致
  • 添加order by子句让结果按年月顺序排列,提升可读性

内容的提问来源于stack exchange,提问作者SnowPablo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:00:47