Как СУММАТЬ с функцией СЧЕТА в условиях - PullRequest
1 голос
/ 27 февраля 2020

Вот моя таблица:

id | marital_stat |
====================
1      divorced 
2      divorced 
3      married 
4      single

Я хочу разделить суммы каждого семейного положения, я использую условие, потому что в моих таблицах используется varchar, а не integer .

Вот мои запросы в моем файле модели:

SELECT
COUNT(CASE WHEN marital = 'divorced'   THEN 1 END) AS divorcestat,
COUNT(CASE WHEN marital = 'married' THEN 1 END) AS marriedstat,
COUNT(CASE WHEN marital = 'single' THEN 1 END) AS singlestat
FROM status_tbl

При запросе выше получается значение, которое я хочу, результаты были:

    divorcestat | marriedstat | singlestat
--------------------------------------------
    2               1              1

Но теперь мне нужно сложить все значения, указанные выше, и получим как Total, (divorcestat+marriedstat+singlestat) -> Total из Count функций. Как мне это сделать? Я попробовал какой-то ответ в stackoverflow, но ничего не получалось. Group by, Union, просто не работает.

Ответы [ 3 ]

2 голосов
/ 27 февраля 2020

Вы можете использовать количество (*)

SELECT
COUNT(CASE WHEN marital = 'divorced'   THEN 1 END) AS divorcestat,
COUNT(CASE WHEN marital = 'married' THEN 1 END) AS marriedstat,
COUNT(CASE WHEN marital = 'single' THEN 1 END) AS singlestat,
COUNT(*) AS Total 
FROM status_tbl
0 голосов
/ 27 февраля 2020

Вы также можете использовать «табличное выражение» для повторного использования значений, которые вы уже вычислили.

Например:

select
  *,
  divorcestat + marriedstat + singlestat as total
from (
  SELECT
  COUNT(CASE WHEN marital = 'divorced'   THEN 1 END) AS divorcestat,
  COUNT(CASE WHEN marital = 'married' THEN 1 END) AS marriedstat,
  COUNT(CASE WHEN marital = 'single' THEN 1 END) AS singlestat
  FROM status_tbl
) x

Это может пригодиться, когда выражение, которое вы используете для вычисления значений, является сложным, и вы не хотите повторять их в своем запросе.

0 голосов
/ 27 февраля 2020

Вы можете добавить count(*) к запросу

SELECT
COUNT(CASE WHEN marital = 'divorced'   THEN 1 END) AS divorcestat,
COUNT(CASE WHEN marital = 'married' THEN 1 END) AS marriedstat,
COUNT(CASE WHEN marital = 'single' THEN 1 END) AS singlestat,
COUNT(*) AS total_stat
FROM status_tbl;

Надеюсь, это вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...