gpt4 book ai didi

sql - 按年份分组和 bool 列 postgres

转载 作者:行者123 更新时间:2023-12-02 02:43:44 25 4
gpt4 key购买 nike

我有下表

id   |  created_on   | is_a   | is_b    | is_c
----------------------------------------------
1 | 01-02-1999 | True |False |False
2 | 23-05-1999 | False |True |False
3 | 25-08-2000 | False |True |False
4 | 30-07-2000 | False |False |True
5 | 05-09-2001 | False |False |True
6 | 05-09-2001 | False |True |False
7 | 05-09-2001 | True |False |False
8 | 05-09-2001 | True |False |False

在查询结果的表中,我想按创建年份进行分组,然后能够比较每年为 is_a 创建了多少条记录。和is_b 。我想完全忽略计数 is_c .

count_a | count_b  | by_creation_year
-----------------------------------------------
1 |1 | 1999
0 |1 | 2000
2 |1 | 2001

我尝试了以下查询:

select count(is_a = True) a, 
count(is_b = True) b,
date_trunc('year', created_on)
from cp_all
where is_c = False -- this removes the records where is_c is True
group by date_trunc('year', created_on)
order by date_trunc('year', created_on) asc;

但我得到一个表,其中 a 和 b 的计数完全相同。

最佳答案

您的 count() 参数的计算结果为 truefalse,无论如何,每个参数都会被计为 1

您想要使用过滤器

select count(*) filter (where is_a) a, 
count(*) filter (where is_b) b,
date_trunc('year', created_on)
from cp_all
where is_c = False -- this removes the records where is_c is True
group by date_trunc('year', created_on)
order by date_trunc('year', created_on) asc;

这样做,您将不需要 where 子句。

关于sql - 按年份分组和 bool 列 postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63138439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com