SQL select case when and group
SQL select case when and group
我有这个table
我想按年龄分组并统计性别类型
本案:
age <= 20 then 'Group <= 20'
age between 21-40 then 'Group 21-40'
age between 41-60 then 'Group 41-60'
age > 60 then 'Group > 60'
我试过这段代码,但出现错误:
%%sql
select customer_id, birthdate, extract('year' from current_date) - extract('year' from birthdate ) age
case when age <= 20 then 'Group <= 20'
when age between 21 and 40 then 'Group 21 - 40'
when age between 41 and 60 then 'Group 41 - 60'
else 'Group > 60' end gender
from dim_customer
group by 1
有什么解决办法吗?提前致谢。
顺便说一句:我在 Python
中使用了这段代码
别名列未在 SELECT 中使用,但在 GROUP BY 和 ORDER BY 子句中使用。
-- PostgreSQL
SELECT t.*
, CASE WHEN age <= 20 THEN 'Group <= 20'
WHEN age BETWEEN 21 AND 40 THEN 'Group 21 - 40'
WHEN age BETWEEN 41 AND 60 THEN 'Group 41 - 60'
ELSE 'Group > 60' END gender
FROM (SELECT customer_id, birthdate
, extract('year' from current_date) - extract('year' from birthdate ) age
from dim_customer) t
请从urlhttps://dbfiddle.uk/?rdbms=postgres_11&fiddle=38c6ba05adc779aed3063e490bcc6376
检查
N.B.: 使用 date_part('year', current_timestamp :: DATE) - date_part('year', birthdate)年龄计算。
统计性别并按部分分组使用别名
SELECT CASE WHEN age <= 20 THEN 'Group <= 20'
WHEN age BETWEEN 21 AND 40 THEN 'Group 21 - 40'
WHEN age BETWEEN 41 AND 60 THEN 'Group 41 - 60'
ELSE 'Group > 60' END gender
, COUNT(t.gender) count_gender
, COUNT(CASE WHEN t.gender = 'M' THEN 1 END) gen_male
, COUNT(CASE WHEN t.gender = 'F' THEN 1 END) gen_female
FROM (SELECT customer_id, birthdate, gender
, extract('year' from current_date) - extract('year' from birthdate ) age
, date_part('year', current_timestamp :: DATE) - date_part('year', birthdate) age1
from dim_customer) t
GROUP BY CASE WHEN age <= 20 THEN 'Group <= 20'
WHEN age BETWEEN 21 AND 40 THEN 'Group 21 - 40'
WHEN age BETWEEN 41 AND 60 THEN 'Group 41 - 60'
ELSE 'Group > 60' END
请检查 url https://dbfiddle.uk/?rdbms=postgres_11&fiddle=ad8af9dd9b82ede20452377615ca7fde
我有这个table
我想按年龄分组并统计性别类型
本案:
age <= 20 then 'Group <= 20'
age between 21-40 then 'Group 21-40'
age between 41-60 then 'Group 41-60'
age > 60 then 'Group > 60'
我试过这段代码,但出现错误:
%%sql
select customer_id, birthdate, extract('year' from current_date) - extract('year' from birthdate ) age
case when age <= 20 then 'Group <= 20'
when age between 21 and 40 then 'Group 21 - 40'
when age between 41 and 60 then 'Group 41 - 60'
else 'Group > 60' end gender
from dim_customer
group by 1
有什么解决办法吗?提前致谢。
顺便说一句:我在 Python
中使用了这段代码别名列未在 SELECT 中使用,但在 GROUP BY 和 ORDER BY 子句中使用。
-- PostgreSQL
SELECT t.*
, CASE WHEN age <= 20 THEN 'Group <= 20'
WHEN age BETWEEN 21 AND 40 THEN 'Group 21 - 40'
WHEN age BETWEEN 41 AND 60 THEN 'Group 41 - 60'
ELSE 'Group > 60' END gender
FROM (SELECT customer_id, birthdate
, extract('year' from current_date) - extract('year' from birthdate ) age
from dim_customer) t
请从urlhttps://dbfiddle.uk/?rdbms=postgres_11&fiddle=38c6ba05adc779aed3063e490bcc6376
检查N.B.: 使用 date_part('year', current_timestamp :: DATE) - date_part('year', birthdate)年龄计算。
统计性别并按部分分组使用别名
SELECT CASE WHEN age <= 20 THEN 'Group <= 20'
WHEN age BETWEEN 21 AND 40 THEN 'Group 21 - 40'
WHEN age BETWEEN 41 AND 60 THEN 'Group 41 - 60'
ELSE 'Group > 60' END gender
, COUNT(t.gender) count_gender
, COUNT(CASE WHEN t.gender = 'M' THEN 1 END) gen_male
, COUNT(CASE WHEN t.gender = 'F' THEN 1 END) gen_female
FROM (SELECT customer_id, birthdate, gender
, extract('year' from current_date) - extract('year' from birthdate ) age
, date_part('year', current_timestamp :: DATE) - date_part('year', birthdate) age1
from dim_customer) t
GROUP BY CASE WHEN age <= 20 THEN 'Group <= 20'
WHEN age BETWEEN 21 AND 40 THEN 'Group 21 - 40'
WHEN age BETWEEN 41 AND 60 THEN 'Group 41 - 60'
ELSE 'Group > 60' END
请检查 url https://dbfiddle.uk/?rdbms=postgres_11&fiddle=ad8af9dd9b82ede20452377615ca7fde