Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 15.01.2021
Сообщений: 7

Как сделать запрос по трём связанным таблицам, чтобы посчитать количество нужных записей?

17.05.2022, 16:58. Показов 513. Ответов 4

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
В SQL Server есть три таблички - "Список детей", "Образовательные учреждения" и "Населённые пункты".

Основная цель: Посчитать сколько детей проживает в каждом населённом пункте.
То есть чтобы можно было вывести запись по типу "г. Красноярск - 500 детей" (это к примеру).
Чтобы посчитать количество детей в определённом населённом пункте, я хочу посчитать сколько детей учится в образовательных учреждениях этого населённого пункта, а потом просто сложить эти числа (надеюсь, понятно написал). И так сделать по каждому населённому пункту.

Для большего понимания, думаю, стоит написать какие столбцы есть в таблицах.

Список детей - "id ребёнка", "ФИО", "id Образовательного учреждения".

Образовательные учреждения - "id учреждения", "Наименование", "id населённого пункта".

Населённые пункты - "id населённого пункта", "Наименование насел. пункта".

Уже несколько дней мучаюсь, не могу додуматься. Я написал код, который просто выводит id населённого пункта и сколько в нём детей. Но как сложить нужных детей только из нужных населённых пунктов - не понимаю

C#
1
2
3
4
5
6
7
8
//База подключена через 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#.

Буду очень благодарен за помощь!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.05.2022, 16:58
Ответы с готовыми решениями:

SQL-запрос по трем связанным таблицам
Еще вопросик по той же строке: А как выглядит SQL-строка, если у меня есть три связанные таблицы (вторая и третья связаны своими полями...

Как правильно составить запрос к связанным таблицам?
Здравствуйте. Я разрабатываю программу на Delphi 7 для работы с базой данных MS Access (2003) со связанными таблицами: ...

Запрос к связанным таблицам
Задание: Вывести ФИО преподавателей, которые преподают у групп с номером > 200 и предмет, который они преподают. Диаграмма: ...

4
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
17.05.2022, 17:14
Вариант - через обычное объединение (JOIN) от самой нижней таблицы в иерархии к самой верхней с последующей группировкой по нужному полю с аггрегирующей функцией.
T-SQL
1
2
3
4
5
6
7
8
9
select city.[name], count(*)
 
from kid
left join school on school.school_id = kik.school_id
left join city on city.city_id = school.city_id
 
where city.city_id = 42 --какой-то конкретный город, если нужно
 
group by city.[name];
0
0 / 0 / 0
Регистрация: 15.01.2021
Сообщений: 7
17.05.2022, 17:26  [ТС]
Не совсем понимаю, как это будет работать
SQL
1
SELECT city.[name], COUNT(*) FROM kid
То есть это выбор названия населённого пункта из таблицы "Список детей"? Но таблицы "Населённые пункты" и "Список детей" не связаны.
Или это что-то другое?
0
 Аватар для Andrey-MSK
3349 / 2235 / 388
Регистрация: 14.08.2018
Сообщений: 7,560
Записей в блоге: 4
17.05.2022, 17:28
Xinist, Почитайте про JOIN в SQL и многое вам станет понятно.
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
17.05.2022, 17:51
Цитата Сообщение от Xinist Посмотреть сообщение
Не совсем понимаю, как это будет работать
В запросе фигурирует три таблицы, связанные по ID. Таблица детей связана с таблицей учреждений, а учреждения связаны с городами.

Там ведь не только 'FROM', там потом ещё два 'JOIN' на другие таблицы.

P.S.: пройдите какой-нибудь базовый туториал по основам SQL, потому как без этого вам будет сложно даже самые простые запросы писать/понимать. И без этих знаний в EF (и другие генерирующие SQL фреймворки) лучше вообще не соваться. На начальном этапе лучше вовсе ограничиться использованием Dapper'a.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.05.2022, 17:51
Помогаю со студенческими работами здесь

Запрос к связанным таблицам
Здравствуйте. Ситуация: Есть 2 связанные таблицы при запросе (SELECT * FROM tovar) выводятся результаты :

Запрос к связанным таблицам
Всем добрый день. Имеются 2 таблицы следующей структуры: 1. Отделы -------------------- | ID | NAME | ...

Запрос к связанным таблицам
Здравствуйте! Есть таблица в каждой строке которой хранятся алармы (время, тип, состояние и т.д.), среди прочих колонок есть...

Составить сложный запрос к связанным таблицам
Здравствуйте, уважаемые форумчане! Дублирую вопрос. Пробовал в ветке баз данных, результат нулевой, а время поджало. Вчера еще надо было....

Посчитать количество дней SQL запрос к двум таблицам
Добрый день уважаемые знатоки. Нужна ваша помощь. Пишу запрос и никак не могу сообразить следующее: Нужно написать запрос который выдаст...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru