指望 SQL 中带有条件语句的列?
Count on a column with a conditional statement in SQL?
我想要一个 table 这样的:
cycle_end_date | count(user_id) | count(repaid_user_id) | event_ts | repayment_ts
15th Jan | 20 | 15 | 23rd Jan | 25th Jan
15th Jan | 30 | 30 | 24th Jan | 24th Jan
我正在使用以下查询:
select
date(cycle_end_date) as cycle_end_date
,date(payload_event_timestamp + interval '5 hours 30 minutes') as event_date
,d.payment_date
,count( s.user_id) as count
,count(case s.user_id when d.payment_date < event_date then 1 else 0 end) as repaid_users
d.payment_date 取自另一个查询 -
case when ots_created_at is null then
current_date else date(ots_created_at + interval ' 5 hours 30 minutes')
end as payment_date
这给我一个错误:ProgrammingError: operator does not exist: character varying = boolean
基本上我想要在触发当天还款的用户数。这基本上是如果事件日期等于还款日期,我们可以发现这么多用户在该事件日期付款。如何找到这个?
您尝试使用“缩写形式”的 case 表达式,其开头如下:
case s.user_id when d.payment_date
为了使此格式有效,when 之后的语法假定相等比较(例如 when d.payment_date
假定 =
),并且在这种简短形式中,它只能是假定的相等运算符。对于更复杂的比较(小于、不等于等),有必要使用更长的 case 表达式格式,如下所示:
case when d.payment_date < event_date then user_id end
请注意,聚合函数 COUNT() 对每个 non-null 值递增,因此为避免计算任何不需要的条件,请不要 return 使用 else
的任何值。例如
count(case when d.payment_date < event_date then user_id end) as col1
或者,如果您希望在查询代码中更明确,请使用 else
到 return NULL,这将不被计算在内,例如
count(case when d.payment_date < event_date then user_id else NULL end) as col1
nb: 除了 returning 列值之外,您还可以使用这样的常量:
count(case when d.payment_date < event_date then 1 end) as col1
我想要一个 table 这样的:
cycle_end_date | count(user_id) | count(repaid_user_id) | event_ts | repayment_ts
15th Jan | 20 | 15 | 23rd Jan | 25th Jan
15th Jan | 30 | 30 | 24th Jan | 24th Jan
我正在使用以下查询:
select
date(cycle_end_date) as cycle_end_date
,date(payload_event_timestamp + interval '5 hours 30 minutes') as event_date
,d.payment_date
,count( s.user_id) as count
,count(case s.user_id when d.payment_date < event_date then 1 else 0 end) as repaid_users
d.payment_date 取自另一个查询 -
case when ots_created_at is null then
current_date else date(ots_created_at + interval ' 5 hours 30 minutes')
end as payment_date
这给我一个错误:ProgrammingError: operator does not exist: character varying = boolean
基本上我想要在触发当天还款的用户数。这基本上是如果事件日期等于还款日期,我们可以发现这么多用户在该事件日期付款。如何找到这个?
您尝试使用“缩写形式”的 case 表达式,其开头如下:
case s.user_id when d.payment_date
为了使此格式有效,when 之后的语法假定相等比较(例如 when d.payment_date
假定 =
),并且在这种简短形式中,它只能是假定的相等运算符。对于更复杂的比较(小于、不等于等),有必要使用更长的 case 表达式格式,如下所示:
case when d.payment_date < event_date then user_id end
请注意,聚合函数 COUNT() 对每个 non-null 值递增,因此为避免计算任何不需要的条件,请不要 return 使用 else
的任何值。例如
count(case when d.payment_date < event_date then user_id end) as col1
或者,如果您希望在查询代码中更明确,请使用 else
到 return NULL,这将不被计算在内,例如
count(case when d.payment_date < event_date then user_id else NULL end) as col1
nb: 除了 returning 列值之外,您还可以使用这样的常量:
count(case when d.payment_date < event_date then 1 end) as col1