Как сделать запрос по трём связанным таблицам, чтобы посчитать количество нужных записей?
В SQL Server есть три таблички - "Список детей", "Образовательные учреждения" и "Населённые пункты".
Основная цель: Посчитать сколько детей проживает в каждом населённом пункте. То есть чтобы можно было вывести запись по типу "г. Красноярск - 500 детей" (это к примеру). Чтобы посчитать количество детей в определённом населённом пункте, я хочу посчитать сколько детей учится в образовательных учреждениях этого населённого пункта, а потом просто сложить эти числа (надеюсь, понятно написал). И так сделать по каждому населённому пункту.
Для большего понимания, думаю, стоит написать какие столбцы есть в таблицах.
Список детей - "id ребёнка", "ФИО", "id Образовательного учреждения".
Образовательные учреждения - "id учреждения", "Наименование", "id населённого пункта".
Населённые пункты - "id населённого пункта", "Наименование насел. пункта".
Уже несколько дней мучаюсь, не могу додуматься. Я написал код, который просто выводит id населённого пункта и сколько в нём детей. Но как сложить нужных детей только из нужных населённых пунктов - не понимаю
//База подключена через ADO.NET (NET Framework)
//КодОрганизациии - это id образовательного учреждения
var children = ВедущийСпециалистEntities.GetContext().СписокДетей.GroupBy(x => x.КодОрганизации).Select(g => new { Name = g.Key, Count = g.Count() });
foreach (var obrUch in children)
{
Trace.WriteLine($"{obrUch.Name} : {obrUch.Count}");
}
(В идеале, конечно, там есть ещё четвёртая таблица типа "Регионы". И можно было бы сразу ещё посчитать сколько детей в регионе. Но пока что мне и этого хватит. Просто если есть какие-то идеи, буду рад почитать)
Можно хотя бы сам SQL запрос как-то сформировать, а дальше попробую сам написать этот запрос на C#.
Ответы (1 шт):
Если это sql server то это обыкновенный sql запрос
как я понял
у школы есть поле регион,
у ребенка есть поле школа
поэтому запрос примерно такой: привязываем ребенка к школе и считаем их количество с групировкой по полю регион.
select count(c.children_id)
from Childrens c
inner join Schools s on c.School_id = s.School_id
group by s.Region_id