我需要帮助编写子查询
I need help in writing a subquery
我有这样的查询来创建日期系列:
Select month
From
(select to_char(created_date, 'Mon') as Month,
created_date::date as start_day,
(created_date::date + interval '1 month - 1 day ')::date as end_day
from generate_series(date '2021-01-26',
date '2022-04-26', interval '1 month') as g(created_date)) AS "thang"
table 看起来像这样:
month
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
现在我想从 KYC
table 中数出 status
。
所以我试试这个:
Select
(Select month
From
(select to_char(created_date, 'Mon') as Month,
created_date::date as start_day,
(created_date::date + interval '1 month - 1 day ')::date as end_day
from generate_series(date '2021-01-26',
date '2022-04-26', interval '1 month') as g(created_date)) AS "thang"),
count(*) filter (where status = 4) as "KYC_Success"
From kyc
group by 1
希望结果是这样的:
Month | KYC_Success
Jan | 234
Feb | 435
Mar | 546
Apr | 157
但是它说
error: more than one row returned by a subquery used as an expression
我应该在此查询中更改什么?
让我们假设 table KYC
有一个名为 created_date
的时间戳列和状态列,并且您想要计算每个月的成功状态 - 即使一个月内成功项目为零。
SELECT thang.month
, count(CASE WHEN kyc.STATUS = 'success' THEN 1 END) AS successes
FROM (
SELECT to_char(created_date, 'Mon') AS Month
, created_date::DATE AS start_date
, (created_date::DATE + interval '1 month - 1 day ')::DATE AS end_date
FROM generate_series(DATE '2021-01-26', DATE '2022-04-26', interval '1 month') AS g(created_date)
) AS "thang"
LEFT JOIN kyc ON kyc.created_date>= thang.start_date
AND kyc.created_date < thang.end_date
GROUP BY thang.month;
我有这样的查询来创建日期系列:
Select month
From
(select to_char(created_date, 'Mon') as Month,
created_date::date as start_day,
(created_date::date + interval '1 month - 1 day ')::date as end_day
from generate_series(date '2021-01-26',
date '2022-04-26', interval '1 month') as g(created_date)) AS "thang"
table 看起来像这样:
month |
---|
Jan |
Feb |
Mar |
Apr |
May |
Jun |
Jul |
Aug |
Sep |
Oct |
现在我想从 KYC
table 中数出 status
。
所以我试试这个:
Select
(Select month
From
(select to_char(created_date, 'Mon') as Month,
created_date::date as start_day,
(created_date::date + interval '1 month - 1 day ')::date as end_day
from generate_series(date '2021-01-26',
date '2022-04-26', interval '1 month') as g(created_date)) AS "thang"),
count(*) filter (where status = 4) as "KYC_Success"
From kyc
group by 1
希望结果是这样的:
Month | KYC_Success
Jan | 234
Feb | 435
Mar | 546
Apr | 157
但是它说
error: more than one row returned by a subquery used as an expression
我应该在此查询中更改什么?
让我们假设 table KYC
有一个名为 created_date
的时间戳列和状态列,并且您想要计算每个月的成功状态 - 即使一个月内成功项目为零。
SELECT thang.month
, count(CASE WHEN kyc.STATUS = 'success' THEN 1 END) AS successes
FROM (
SELECT to_char(created_date, 'Mon') AS Month
, created_date::DATE AS start_date
, (created_date::DATE + interval '1 month - 1 day ')::DATE AS end_date
FROM generate_series(DATE '2021-01-26', DATE '2022-04-26', interval '1 month') AS g(created_date)
) AS "thang"
LEFT JOIN kyc ON kyc.created_date>= thang.start_date
AND kyc.created_date < thang.end_date
GROUP BY thang.month;