简体   繁体   中英

Sql distinct and group by boolean field

I want to count the distinct occurrences of some column grouped and non-grouped by two boolean columns

select count(Distinct some_column) as Uniques, sum(some_other_col)
from myTable T
where T.created_at>'2016-09-15'
group by T.col1, T.col2

This query gives four values

uniques when col1=true and col2=true
uniques when col1=true and col2=false
uniques when col1=false and col2=true
uniques when col1=false and col2=false

Is it possible to change the same query and to get these three values? I can't get that info combining the first 4 values

uniques  (all)
uniques when col1=true 
uniques when col2=true

UPDATE

Actually I want to keep the group by because there are some other values that I get the sum.

Use conditional aggregation:

select count(Distinct some_column) as Uniques,
       count(distinct case when t.col1 then some_column end) as Uniques_col1_true,
       count(distinct case when t.col2 then some_column end) as Uniques_col2_true
from myTable t
where t.created_at > '2016-09-15';

Try this

SELECT SUM(CASE WHEN col1 = TRUE
           AND col2 = TRUE THEN 1 ELSE 0 END) AS opt1,
       SUM(CASE WHEN col1 = TRUE
           AND col2 = FALSE THEN 1 ELSE 0 END) AS opt2,
FROM
    (SELECT DISTINCT col1,
                     col2,
                     somecolumn
     FROM TABLE T
     WHERE ...) AS TB

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM