powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопрос к профи: помогите составить запрос
5 сообщений из 5, страница 1 из 1
Вопрос к профи: помогите составить запрос
    #38527642
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется:
1) object: ID
2) licence: ID, objectID
3) term: licenceID для allow, objectID для used
В term.objectID ссылается на совершенно другой object (который отличается от object в licence), для которого устанавливается значение used
Значение allow устанавливается для object, который находится в licence, и связь получается через таблицу licence

Нужно вывести одним запросом:
1) Значение allow:
SELECT object.ID, SUM(term.allow)
FROM object
LEFT JOIN licence ON licence.objectID=object.ID
LEFT JOIN term ON term.licenceID=licence.ID
GROUP BY object.ID

2) Значение used:
SELECT object.ID, SUM(term.used)
FROM object
LEFT JOIN term ON term.objectID=object.ID
GROUP BY object.ID

3) Булевское overflow:
CASE
WHEN allow>used THEN 1
ELSE 0
END overflow

Обязательно нужно иметь возможность сортировать результаты по allow и used, и фильтровать результаты по overflow (overflow=1 or 0)

Был бы очень благодарен за помощь!
Сейчас запрос следующий, но не считает allow, и нельзя ни сортировать, ни фильтровать результат

SELECT

(SELECT sum(term.used)
FROM term
LEFT JOIN licence
ON licence.ID=term.licenceID
WHERE term.objectID=objectID) used,

(SELECT sum(term.allow)
FROM term
WHERE term.licenceID=licence.ID) allow,

CASE
WHEN allow<used then 1
ELSE 0
END overflow

FROM object
LEFT JOIN licence
ON licence.objectID=object.ID
GROUP BY a.id
...
Рейтинг: 0 / 0
Вопрос к профи: помогите составить запрос
    #38527709
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m1andry3) term: licenceID для allow, objectID для usedЯННП. Это что значит:
- 3 поля "licenceID", "objectID", "type"(allow/used)
- 2 поля "termtype"(allow/used), "termval" (licenceID/objectID в зависимости от первого)
- или какой-то третий вариант?
...
Рейтинг: 0 / 0
Вопрос к профи: помогите составить запрос
    #38527750
tanglir, очевидно, что третий(полей всего 4), ибо если посмотреть запросы, то в таблице term есть поля allow и used, в которых, скорее всего, стоят 1 или 0
...
Рейтинг: 0 / 0
Вопрос к профи: помогите составить запрос
    #38527808
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SELECT sq.ID ID
,      SUM(sq.allow) allow
,      SUM(sq.used) used
,      (SUM(sq.allow) > SUM(sq.used)) overflow

FROM
(
  SELECT o1.ID, SUM(t1.allow) allow, 0 used
  FROM object o1
  LEFT JOIN licence l1 ON l1.objectID=o1.ID
  LEFT JOIN term t1 ON t1.licenceID=l1.ID
  GROUP BY o1.ID

  UNION ALL

  SELECT o2.ID, 0, SUM(t2.used)
  FROM object o2
  LEFT JOIN term t2 ON t2.objectID=o2.ID
  GROUP BY o2.ID
) sq1

GROUP BY sq.ID


?
...
Рейтинг: 0 / 0
Вопрос к профи: помогите составить запрос
    #38527866
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, полей 4.
allow и used - это объемы, который разрешен для использования (allow), и используются (used) согласно накладной.
Их и надо посчитать.
Вот только allow действует для objectID, который проставлен в licence, а used используется для подсчета по objectID, который проставлен в term
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопрос к профи: помогите составить запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]