С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 03.05.2015
Сообщений: 5
1
SQLite

Выборка из трех таблиц с функцией count()

06.05.2015, 10:30. Показов 1599. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня имеется три таблицы, связанные внешним ключами:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE office(id_office INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
address TEXT NOT NULL, email TEXT NOT NULL);
 
CREATE TABLE manager(id_manager INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
FIO TEXT NOT NULL, id_office INTEGER NOT NULL, FOREIGN KEY(id_office) REFERENCES office (id_office));
 
CREATE TABLE selling(id_selling INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
DATE TEXT NOT NULL,amount INTEGER NOT NULL,
sum_of_sale INTEGER NOT NULL,comment TEXT ,
number_of_disk INTEGER NOT NULL, id_goods INTEGER NOT NULL,
id_manager INTEGER NOT NULL, FOREIGN KEY(id_goods) REFERENCES goods(id_goods),
FOREIGN KEY(id_manager) REFERENCES manager(id_manager));
По заданию нужно вывести продаваемость по офисам. Я так понимаю, что требуется вывести допустим адрес офиса и кол-во продаж из него (подсчитать id_selling)
пишу следующий запрос, но он работает не корректно, если к одному офису относится больше одного менеджера:
SQL
1
2
3
4
5
6
SELECT  o.id_office AS io, o.address, 
       COUNT(selling.id_selling) 
       FROM office AS o
       JOIN selling 
       ON selling.id_manager = (SELECT manager.id_manager FROM manager WHERE
       manager.id_office=io)  GROUP BY o.address;
Как решить эту проблему, помогите ,пожалуйста!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.05.2015, 10:30
Ответы с готовыми решениями:

Выборка из трех таблиц
Есть три модели для Codefirst: public class Client { public int ClientId { get; set;...

Выборка из двух таблиц с использованием count(*)
Наткнулся на вот такую проблему, бьюсь уже неделю:( Суть проблемы: Есть две таблицы. В одной...

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

Выборка из трех таблиц
Есть три таблицы: Таблица TOVAR (продукты) id товара|Название 22|Хлеб 23|Соль 24|Мука...

5
Эксперт .NET
17793 / 12944 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
06.05.2015, 10:43 2
Цитата Сообщение от sherbakova96 Посмотреть сообщение
нужно вывести продаваемость по офисам.
Не могли бы вы пояснить, что означает продаваемость по офисам и какое отношение к ней имеют менеджеры?
0
0 / 0 / 0
Регистрация: 03.05.2015
Сообщений: 5
06.05.2015, 11:02  [ТС] 3
Не знаю, что имел ввиду преподаватель, но я понимаю продаваемость по филиалам как вывод адреса филиала и количество зарегистрированных продаж из него.
т.е. office.address и count(selling.id_selling)
таблица selling связана с таблицей manager по id_manager, а manager в свою очередь с таблицей office по id_office. Вот причем менеджер. Продажи производит менеджер. Но в офисе их может быть несколько, мой запрос это не учитывает и считает неверно.
0
Эксперт .NET
17793 / 12944 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
06.05.2015, 13:33 4
Лучший ответ Сообщение было отмечено kolorotur как решение

Решение

Цитата Сообщение от sherbakova96 Посмотреть сообщение
таблица selling связана с таблицей manager по id_manager, а manager в свою очередь с таблицей office по id_office.
Ага, понятно.

Вот так сработает?
SQL
1
2
3
4
5
6
7
8
9
10
SELECT o.id_office, o.address, COUNT(s.id_selling)
FROM office AS o
 
JOIN manager AS m
  ON m.id_office = o.id_office
 
LEFT JOIN selling AS s
  ON s.id_manager = m.id_manager
 
GROUP BY o.id_office, o.address
0
0 / 0 / 0
Регистрация: 03.05.2015
Сообщений: 5
06.05.2015, 14:06  [ТС] 5
да, заработало, спасибо!)
0
Эксперт .NET
17793 / 12944 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
06.05.2015, 14:13 6
sherbakova96, на здоровье.
Исправьте немного запрос, чтобы с таблицей manager тоже был LEFT JOIN — тогда в результате будут отображаться офисы без менеджеров, если вдруг такая ситуация возникнет.
0
06.05.2015, 14:13
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.05.2015, 14:13
Помогаю со студенческими работами здесь

Выборка из трех таблиц
Добрый день. Есть три таблицы: t1: id | col11 | col12 | col13| col14 t2: id |col21 | col22 |...

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

Выборка из трех таблиц
Здравствуйте, нужна помощь, есть 3 таблицы мне нужно все в кучу слепить чтобы вывод имен был как на...

Выборка из трех таблиц
Доброго времени суток БД Paradox, компонент Query Есть 3 таблицы Table1...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru