powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Два JOINa и SUM() - помогите скорректировать запрос
8 сообщений из 8, страница 1 из 1
Два JOINa и SUM() - помогите скорректировать запрос
    #39151637
Greider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется три таблицы: счета, стоимость товара в них, и таблица с оплатами по этому счету (их может быть несколько).
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
счета - sht
ID|sheet|date
1|счет1|01.01.2016

товары в счетах items
ID|sheet|item|price
1|счет1|ручка  |100
2|счет1|блокнот|200

оплата по счетам payments
ID|sheet|pay
1|счет1|50
2|счет1|50

Нужно подсчитать суммы товаров и оплат для каждого счета, т.е. ожидаю получить:

Код: plaintext
счет1 | 300 | 100


Если нужно подсчитать сумму чего-то одного, например товаров в счете, то проблем не возникает:

Код: sql
1.
2.
3.
4.
SELECT sheet,
SUM(price) AS price_sum,
FROM sht 
LEFT JOIN items USING (sheet)



Получается
Код: plaintext
счет1 | 300

Но когда я прибавляю второй JOIN то все суммы еще раз удваиваются:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT sheet,
SUM(price) AS price_sum,
SUM(pay) AS pay_sum  
FROM sht 
LEFT JOIN items USING (sheet)
LEFT JOIN payments USING (sheet)



Код: plaintext
счет1 | 600 | 200

А как правильно сделать в этом случае?.. Чувствуется что надо как-то их разделить но все не могу понять как. Заранее благодарю!
...
Рейтинг: 0 / 0
Два JOINa и SUM() - помогите скорректировать запрос
    #39151661
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Greiderкак правильно сделать в этом случае?
Код: sql
1.
2.
3.
4.
SELECT ...
FROM sht
LEFT JOIN (SELECT SUM ... FROM items ... GROUP BY ...) i ON ...
LEFT JOIN (SELECT SUM ... FROM payments ... GROUP BY ...) p ON ...
...
Рейтинг: 0 / 0
Два JOINa и SUM() - помогите скорректировать запрос
    #39151707
Greider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо!

Но почему-то
Код: sql
1.
2.
3.
SELECT sheet FROM sht
LEFT JOIN (SELECT SUM(price) AS price_sum FROM items) AS s1 ON sht.sheet = items.sheet
LEFT JOIN (SELECT SUM(pay) AS pay_sum FROM payments)  AS s2 ON sht.sheet = payments.sheet

выдает ошибку Unknown column 'items.sheet' in 'on clause' :

Но раз уж видно все равно придется использоваться несколько селектов, то вот так - без JOIN - получается:
Код: sql
1.
2.
3.
4.
SELECT sheet,
(SELECT SUM(price) AS price_sum FROM items WHERE sht.sheet = items.sheet) AS s1,
(SELECT SUM(pay) AS pay_sum FROM payments WHERE sht.sheet = payments.sheet)  AS s2
FROM sht;



Или с JOIN должно быть лучше?
...
Рейтинг: 0 / 0
Два JOINa и SUM() - помогите скорректировать запрос
    #39151749
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Greiderпочему-то
Код: sql
1.
2.
3.
SELECT sheet FROM sht
LEFT JOIN (SELECT SUM(price) AS price_sum FROM items) AS s1 ON sht.sheet = items.sheet
LEFT JOIN (SELECT SUM(pay) AS pay_sum FROM payments)  AS s2 ON sht.sheet = payments.sheet


выдает ошибку Unknown column 'items.sheet' in 'on clause'
Ну потому что безграмотно.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT sht.sheet, s1.price_sum, s2.pay_sum 
FROM sht
LEFT JOIN 
    (SELECT i.sheet, SUM(i.price) price_sum FROM items i GROUP BY i.sheet) s1 
  ON sht.sheet = s1.sheet
LEFT JOIN 
    (SELECT p.sheet, SUM(p.pay) pay_sum FROM payments p GROUP BY p.sheet) s2 
  ON sht.sheet = s2.sheet
...
Рейтинг: 0 / 0
Два JOINa и SUM() - помогите скорректировать запрос
    #39151760
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Greider,

авторИмеется три таблицы: счета, стоимость товара в них, и таблица с оплатами по этому счету (их может быть несколько).

Нужно подсчитать суммы товаров и оплат для каждого счета, т.е. ожидаю получить:




Нужно считать отдельно двумя запросами, НЕ JOINить товары счёта и оплаты друг с другом.
Два запроса или подзапроса с отдельными группировками, затем -- JOIN результатов.
...
Рейтинг: 0 / 0
Два JOINa и SUM() - помогите скорректировать запрос
    #39152015
Greider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
точняк, я пытался делать алиасы всему подряд, теперь дошло, селекту свои алиасы, джоину свои, спасибо )

авторДва запроса или подзапроса с отдельными группировками, затем -- JOIN результатов.

А чем вариаинт без JOINов принципиально отличается (в рамках последующего вывода на веб-страницу)?
...
Рейтинг: 0 / 0
Два JOINa и SUM() - помогите скорректировать запрос
    #39152070
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Greiderчем вариаинт без JOINов принципиально отличается
Планом выполнения.
...
Рейтинг: 0 / 0
Два JOINa и SUM() - помогите скорректировать запрос
    #39152430
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GreiderAkina,
точняк, я пытался делать алиасы всему подряд, теперь дошло, селекту свои алиасы, джоину свои, спасибо )


С учётом того, что алиасы таблицам даются, это какой-то бред.


GreiderавторДва запроса или подзапроса с отдельными группировками, затем -- JOIN результатов.

А чем вариаинт без JOINов принципиально отличается (в рамках последующего вывода на веб-страницу)?

Тем, что если JOINить к данной таблице ещё две таблицы по связи 1:N каждая, то записи будут множиться как N**2
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Два JOINa и SUM() - помогите скорректировать запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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