Счетчик SQL с и без ГДЕ в 2 столбцах - PullRequest
0 голосов
/ 07 марта 2019

Я попробовал несколько способов использовать UNION и JOIN, но я не смог их получить.

Это мой стол:

      name    gender
---------------------
Row1 | joe     m
Row2 | becky   f
Row3 | sam     m 
Row4 | simon   m
Row5 | olivia  f
Row6 | bill    m

Теперь я хотел бы иметь SQL-запрос, который МОЖЕТ СЧИТАТЬ все и только женские записи:

      all  female
---------------------
Row1 | 6     2

Итак, я попробовал:

   SELECT COUNT(*) AS all FROM table
   UNION ALL
   SELECT COUNT(*) AS female FROM table WHERE gender = 'f'

Что дает мне:

      all
---------
Row1 | 6 
Row2 | 2 

Как получить результат в 2 столбцах? И есть ли способ сделать это в 1 SELECT?

Ответы [ 5 ]

2 голосов
/ 07 марта 2019

с условной агрегацией:

select
  sum(1) "all",
  sum(case when gender = 'f' then 1 else 0 end) female
from tablename

См. Демоверсию

2 голосов
/ 07 марта 2019

Попробуйте использовать

SELECT 
    COUNT(*) AS all, 
    SUM(CASE gender 
            WHEN 'f' THEN 1 
            ELSE 0 
        END
    ) AS female 
FROM table

Добавлена ​​демоверсия

0 голосов
/ 07 марта 2019

Другое альтернативное решение - использовать cte или temptable, например:

;with cte as (
   select count(*) as FemaleCount
   from mytable
   where gender='f'
)
select AllCount = (select count(*) from mytable)
       FemaleCount = (select FemaleCount from cte)

Примечание: cte работает на Sql Server.

0 голосов
/ 07 марта 2019

вариант использования

SELECT COUNT(*) AS all, sum( case when gender='f'then 1 else 0 end) as f FROM table
0 голосов
/ 07 марта 2019

Вы можете использовать это COUNT() не учитывает NULL значения. Попробуйте что-то вроде этого:

SELECT COUNT(*) AS "all", COUNT(NULLIF(gender, 'm')) AS female
FROM table
...