Попытка подсчитать количество входов определенного типа по отдельности - PullRequest
1 голос
/ 03 мая 2019

У меня есть таблица с именем posts, в которой есть поле с именем forum_type_id.

И еще одна таблица с именем forum, в которой есть поле с именем forum_type и id.

идентификаторы таблицы форума представляют тип, который используется для связи с forum_type_id из таблицы posts

Теперь в моей БД.

  • В сообщениях у меня есть 3 записи с forum_type_id = 2 (представляющим тип 2 моей таблицы форума, которая называется «Вопросы»).

  • 2 записи с forum_type_id = 1(представляющий тип 1 моей таблицы форума, который является "Общим")

Я пытаюсь сделать запрос, который получает суммы каждого "типа" отдельно

Я пытаюсь что-то вроде этого.

  SELECT DISTINCT
    (SELECT COUNT (*) FROM posts WHERE posts.forum_type_id = '1') AS generalCount,forum.id
    (SELECT COUNT(*) FROM posts WHERE posts.forum_type_id = '2') AS questionsCount, forum.id
FROM forum;

Я ожидаю получить для этого примера

generalCount = 2;

questionsCount = 3;

но он добавляет и возвращает мне только 1 строку с 2 добавленными числами

Ответы [ 2 ]

1 голос
/ 03 мая 2019

Как насчет group by?

SELECT p.forum_type_id, COUNT(*)
FROM posts p
GROUP BY p.forum_type_id;

Вы можете получить имена из таблицы форумов, если хотите:

SELECT f.?, COUNT(*)  -- use the column with the name you want
FROM posts p JOIN
     forums f
     ON p.forum_type_id = f.forum_type_id
GROUP BY p.?;

Вы можете повернуть это, чтобы поместить значения в столбцыа не строки, но это не обязательно.

1 голос
/ 03 мая 2019

Вы можете попробовать использовать условное агрегирование

SELECT 
    count(case when posts.forum_type_id = '1' then 1 end) AS generalCount
,
    count(case when posts.forum_type_id = '2' then 1 end) AS questionsCount
,
    forum.id
FROM forum
group by forum.id 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...