Как посчитать разные строки и поместить их в одну таблицу в SQL? - PullRequest
0 голосов
/ 25 апреля 2020

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

select
count(cc.fk_id_candidates) as 'category A' 
from candidate_category cc, candidate c, category cat
where c.id=cc.fk_id_candidates and cc.fk_id_category=cat.id and category.name='A';

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

Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Насколько я понимаю, у вас есть три таблицы: - Кандидат_категория cc, - Кандидат c, - КАТАЛОГ категории

Кроме того, вы создали отношения ниже, используя ССЫЛКИ:

where c.id=cc.fk_id_candidates 
and cc.fk_id_category=cat.id 
and category.name='A;

Теперь у вас уже должны быть все три таблицы в одной таблице, и вы можете просмотреть их следующим образом: и это очень важный шаг, чтобы найти общий столбец, в котором вы можете отфильтровать его и найти нужные данные.

Select * 

from candidate_category cc, 
candidate c, 
category cat 

where c.id=cc.fk_id_candidates 
and cc.fk_id_category=cat.id 
0 голосов
/ 25 апреля 2020

Обычно вы добавляете предложение group by к названию категории и / или к идентификатору:

select cat.category.name, count(*) cnt
from candidate_category cc
inner join candidate c on c.id = cc.fk_id_candidates and 
inner join category cat on cc.fk_id_category = cat.id
group by cat.id, cat.category.name;

Обратите внимание, что я изменил ваш запрос, чтобы использовать стандартные объединения (с ключевым словом on), а не неявные объединения (с запятыми в предложении from и условиями в предложении where) - этот старый синтаксис не должен использоваться в новом коде.

...