Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
1 / 1 / 0
Регистрация: 10.01.2016
Сообщений: 9

Как совместить две агрегатные функции в одном запросе

15.06.2016, 20:56. Показов 4722. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Есть следующий запрос:

SQL
1
2
3
4
SELECT fio, COUNT(inq_id) AS quantity, sys_name
FROM ((employees JOIN systems ON tabnum=admin)JOIN users ON systems.sys
_id=users.sys_id) JOIN inquiries ON users.user_id=inquiries.user_id
GROUP BY sys_name, fio
Результат выполнения данного запроса следующий:
fio | quantity | sys_name
----------------------------------------+----------+------------------------
Сметанин Анатолий Андреевич___| 3 | А
Никандров Сергей Сергеевич____ | 4 | Б
Старов Степан Петрович_________| 6 | В
Берестовой Юрий Александрович_| 5 | Г
Берестовой Юрий Александрович_| 3 | Д
Старов Степан Петрович_________| 3 | Е
Берестовой Юрий Александрович_| 4 | Ж
Берестовой Юрий Александрович_| 1 | З
Никандров Сергей Сергеевич_____| 1 | И
(9 строк)

Пытаюсь данный запрос изменить таким образом, чтобы он выводил только строки с наименьшим quantity то есть впихнуть в запрос еще одну функцию - min. А как это правильно сделать, ума не приложу =( Help!!!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.06.2016, 20:56
Ответы с готовыми решениями:

Как соединить в одном запросе JOIN и множество подзапросов
Здравствуйте, есть таблица, скажем так каталог автомобилей. В этой таблице большинство столбцов это id номера столбцов других таблиц,...

Как совместить в одном запросе комбобокс и радиобатн
Всем доброго времени суток! Помогите новичку! Решила заняться саморазвитием, в универе изучала С++, в данный момент подсела на Delphi и на...

Не получается в запросе использовать агрегатные функции
Единомышленники, всем привет! Опять столкнулся по кривому с агрегатными функциями, не получается в запросе использовать эту функцию, не...

7
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
16.06.2016, 00:08
не переделывая внутреннюю часть запроса
SQL
1
2
3
4
5
SELECT fio, quantity, sys_name
FROM
(SELECT fio, sys_name, quantity, MIN(quantity) OVER (partition BY fio) min_q
FROM (здесь исходный запрос)AS a) AS b
WHERE quantity = min_q
план всего запроса будет ужасным.
подсчет минимальности можно засунуть и в исходный запрос, только нужно понимать все приведенное множество join'ов, чтобы оптимально выстроить запрос.
0
1 / 1 / 0
Регистрация: 10.01.2016
Сообщений: 9
16.06.2016, 04:24  [ТС]
Структура у базы следующая (см. вложение)
Вложения
Тип файла: rar база.rar (9.0 Кб, 10 просмотров)
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
16.06.2016, 12:22
вроде так, но надо проверять на ваших данных
SQL
1
2
3
4
5
6
7
8
9
10
11
12
WITH
admins AS
 (SELECT u.user_id, e.fio, s.sys_name
 FROM systems s, employees e, users u WHERE s.admin = e.tabnum AND e.tabnum = u.tabnum),
qstat AS
 (SELECT adm.fio, adm.sys_name, COUNT(q.inq_id) AS qcnt
 FROM admins adm, inquiries q WHERE adm.user_id = q.user_id
 GROUP BY adm.fio, adm.sys_name)
SELECT fio, sys_name, q1.qcnt
FROM qstat q1
WHERE qcnt = (SELECT MIN(qcnt) FROM qstat q2 WHERE q2.admin=q1.admin)
ORDER BY fio;
1
1 / 1 / 0
Регистрация: 10.01.2016
Сообщений: 9
16.06.2016, 18:04  [ТС]
Ругается на 11 строку :
"ОШИБКА: колонка q2.admin не существует
СТРОКА 11: ...HERE qcnt = (SELECT MIN(qcnt) FROM qstat q2 WHERE q2.admin=q..."
^

Добавлено через 58 минут
Все, разобралась! =)


SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
WITH
admins AS
 (SELECT DISTINCT s.sys_id, e.fio, s.sys_name
 FROM systems s, employees e, users u WHERE s.admin = e.tabnum AND s.sys_id = u.sys_id),
qstat AS
 (SELECT adm.fio, adm.sys_name, COUNT(q.inq_id) AS qcnt
 FROM admins adm, inquiries q, users u WHERE adm.sys_id = u.sys_id AND u.user_id=q.user_id
 GROUP BY adm.fio, adm.sys_name)
SELECT fio
FROM qstat
WHERE qcnt = (SELECT MIN(qcnt) FROM qstat)
GROUP BY  fio
ORDER BY fio;

Огромное спасибо за помощь!
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
17.06.2016, 13:40
Еще раз перечитал задание запроса... да, ваш вариант более близок к правде, я неверно понял запрос в первый раз

Но, не придирки ради...
Можно убрать users из admins - все равно в выборке она не участвует, заодно и DISTINCT не нужен будет.
И group by fio в конце - тоже никакого смысла нет.
0
1 / 1 / 0
Регистрация: 10.01.2016
Сообщений: 9
20.06.2016, 20:31  [ТС]
С замечаниями согласна!
Появился еще один вопрос, как вывести системы, по которым не было запросов. У меня не получилось заставить count выводить количество пустых строк.
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
21.06.2016, 00:22
можно так, посчитать для каждой системы кол-во запросов, отфильтровать только системы с нулевым кол-вом.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
  s.sys_name,
  COUNT(q.inq_id)
FROM
  systems s,
  users u,
  inquiries q
WHERE
  s.sys_id = u.sys_id AND u.user_id = q.user_id
GROUP BY
  s.sys_name
HAVING COUNT(q.inq_id) = 0;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.06.2016, 00:22
Помогаю со студенческими работами здесь

Две задачи совместить в одном документе,чтобы работали
В этом файле заменить первую задачу на вот эту

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

Две таблицы из разных БД в одном запросе
Вообщем как это можно организовать??? Не хотелось просто что бы одинаковые поля были в двух таблицах.

Соединить две таблицы в одном запросе
Первый запрос: SELECT * FROM sd_flats_short as f LEFT JOIN (SELECT product_id, category, count(id) as comments FROM sd_comments GROUP...

Вывести две таблицы в одном запросе
помогите нужно вывести 2 таблицы в одном запросе . к примеру таблица а и б .. помоги сформировать запрос Добавлено через 11 минут ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru