|
Комбинирование таблиц и сумма
|
|||
---|---|---|---|
#18+
Всем привет. Столкнувшись с торговлей, понял, что плохо представляю, как работает group by, sum, и left join. Если всё по-отдельности, то предельно ясно. Итак, имеем: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Соответственно, таблица с суммами купленных товаров от разных поставщиков, и таблица оплат. Мне нужно совместить по каждому контрагенту суммарно, сколько поступило товара и сколько оплачено. Делаю Код: sql 1. 2. 3.
Цифры получаются сильно завышенные, по сравнению если делать запросы отдельно: Код: sql 1. 2. 3. 4. 5.
Как правильно? во всех ли СУБД так, или это только в sqlite так ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2020, 13:47 |
|
Комбинирование таблиц и сумма
|
|||
---|---|---|---|
#18+
Серега Г Как правильно? во всех ли СУБД так, или это только в sqlite так ? Правильно делать отдельными запросами. В любой реляционной СУБД. PS Советую почитать какую-нибудь книжку по основам SQL. Join не для того чтобы меньше букв писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2020, 13:55 |
|
Комбинирование таблиц и сумма
|
|||
---|---|---|---|
#18+
Серега Г where payments.inn=eupds.inncontr Серега Г inncontr TEXT, inn INT, ??? За такое убивать нужно. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2020, 14:13 |
|
Комбинирование таблиц и сумма
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Серега Г where payments.inn=eupds.inncontr Серега Г inncontr TEXT, inn INT, ??? За такое убивать нужно. IMHO В SQLite прокатит, тут типы автоматом в зависимости от значения выбираются. Правда я не понимаю зачем их тогда вообще задавать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2020, 14:19 |
|
Комбинирование таблиц и сумма
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Понятное дело, если бы я где-то в публичном проекте или где-то у работодателя так написал. Этот минипроектик чисто для себя, для сокращения "мышещёлкания". И я не думаю, что разница в типах в этих таблицах приводит к дублированию суммируемых записей. Так вопрос, почему они дублируются? В основах по SQL нигде не встречал особенностей использования join и агрегатных функций совместно с group by. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2020, 14:36 |
|
Комбинирование таблиц и сумма
|
|||
---|---|---|---|
#18+
Серега Г В основах по SQL нигде не встречал особенностей использования join и агрегатных функций совместно с group by. Одно другому не мешает. Чтобы понять что суммируется - убери group by и посмотри Код: sql 1.
JOIN можно делать только ключевым полям, читай теорию. PS Если очень хочется одним запросом, то используй те два запроса как подзапросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2020, 14:45 |
|
Комбинирование таблиц и сумма
|
|||
---|---|---|---|
#18+
Dima T, хм. Конкретно в этом случае получается, что суммируется декартово произведение между первой таблицей и второй. ХМ, но это я "упростил" при публикации поста. В реале у меня есть ещё таблица contragents, в которой поле inn является primary key, ну и выходит, что при подтягивании данных из "правой" таблицы, данные "левой" дублируются, если в "правой" несколько строк, содержащих PK с "левой". Непонятно, почему так происходит. Ну а так да, к подзапросам я пришёл, получается то, что надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2020, 15:17 |
|
Комбинирование таблиц и сумма
|
|||
---|---|---|---|
#18+
У тебя получается связь многие ко многим. Как следствие - дублирование строк. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
При объединении по id, каждой строке с id=1 из первой таблицы проставиться каждая строка с id=1 из 2-й таблицы, получим: Код: sql 1. 2. 3. 4. 5. 6.
Ну и как бы что будет если просуммировать столбцы? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2020, 15:21 |
|
Комбинирование таблиц и сумма
|
|||
---|---|---|---|
#18+
Серега Г В реале у меня есть ещё таблица contragents Это неважно, добавление этой таблицы в запрос ничего не меняет. Нельзя join`ить к одному PK несколько FK с разных таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2020, 15:30 |
|
Комбинирование таблиц и сумма
|
|||
---|---|---|---|
#18+
Агрох, вот, неочевидно, почему многие ко многим. По задумке - присоединение таблиц один ко многим. Я думал, что в результате будут строки с первой таблицы (в ней инн является первичным ключом), а дальше присоединяться строки из второй и третьей таблицы, заполняя поля не своей таблицы значением null (а они не null заполняются), а в итоге выходит, 1й join отрабатывает, и становиться "левой таблицей" для следующего join, поэтому и "многие ко многим"... Всем спасибо! Тему можно закрывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2020, 15:48 |
|
|
start [/forum/topic.php?fid=54&gotolast=1&tid=2008349]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
425ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 535ms |
0 / 0 |