SQL计数并选择其他字段

时间:2020-02-05 01:57:12

标签: sql count snowflake-cloud-data-platform

我知道很基本,但是让自己感到困惑。我只想在最后添加一列,以显示unique_key的计数

channelData

我收到此错误:

select unique_key , date_trunc('month',enrollment_date::date) date_enrolled,
enrollment_reason, count(unique_key)
from table1
group by unique_key;

3 个答案:

答案 0 :(得分:1)

运行该命令时,出现错误...'enrollment_date' in select clause is neither an aggregate...,这是奇怪的,它的unique_key错误。

但是我认为正在发生的事情是您试图在选择的项目中显示日期和注册原因,但是您没有按这些分组。例如,您所拥有的查询试图获取一个unique_key的所有行,但是却不知道要返回哪个enrollment_reason。即使每个具有特定unique_key的记录都具有相同的enrollment_reason,查询优化器也不知道这一点,因此也就不作此假设。

通常,要解决此问题,您应该将select子句中不是聚合的所有内容分组。

select unique_key , date_trunc('month',enrollment_date::date) date_enrolled, 
enrollment_reason, count(unique_key)
from table1
group by unique_key, date_enrolled, enrollment_reason;

另一种方法是将这些属性汇总在一起。如果您知道该列始终是相同的,或者您不在乎为该列得到的结果,这将很好地起作用。 Max是为此的常见选择。

select unique_key,
  max(date_trunc('month',enrollment_date::date)) date_enrolled, 
  max(enrollment_reason),
  count(unique_key)
from table1
group by unique_key, date_enrolled, enrollment_reason;

答案 1 :(得分:0)

我认为您打算这样做:

select date_trunc('month',enrollment_date::date) as date_enrolled,
       enrollment_reason, count(*)
from table1
group by date_trunc('month',enrollment_date::date), enrollment_reason;

答案 2 :(得分:0)

您可以使用派生表来实现此目的。您需要具有GROUP BY子句的聚合函数。

select unique_key, count(date_enrolled)
from
(select unique_key , date_trunc('month',enrollment_date::date) date_enrolled,
enrollment_reason
from table1) as t
group by unique_key;