|
|
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! `В базе имеется таблицы:incomes,sales,Products. Задача следуюшая- в query вывести: 1. sum(incomes) 2. sum(sales) 3. количество товаров сейчас: a-b таблица 'incomes' имеет столбцы:Incomeid,ProductId,quant(количество прыходов)... таблица 'sales' имеет столбцы: SalesId, IncomeId, ProductId, quant(количество продаж товара) ... пишу SQL: select i.productId, sum(i.quant) as iq, sum(s.quant) as sq from income i,sales s* where (i.incomeId=s.incomeId) group by i.productId или select i.productId, sum(i.quant) as iq, sum(s.quant) as sq from income left outer join s on (i.IncomeId=s.IncomeId) group by i.productId но вместо того чтобы вывести: Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. 4. 5. спасибо заранее! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2014, 20:04 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
Davidkokodatabase server- Interbase 2009. В котором нет ни derived tables, ни CTE. Если уберёшь третий пункт и разницу будешь считать непосредственно при выводе - можешь обойтись подзапросами. Иначе - хранимая процедура или монстровитый union all с последующим group by. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2014, 20:21 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovDavidkokodatabase server- Interbase 2009. В котором нет ни derived tables, ни CTE. Если уберёшь третий пункт и разницу будешь считать непосредственно при выводе - можешь обойтись подзапросами. Иначе - хранимая процедура или монстровитый union all с последующим group by. без третьего пункта тоже не смог решить. А если перевести базу в Firebird 2.5? поможет (derived tables и CTE)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2014, 20:30 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
DavidkokoА если перевести базу в Firebird 2.5? Тогда у тебя они будут в распоряжении и запрос станет простым и элегантным. Но если ты с такой лёгкостью можешь манипулировать базой, то проще будет объединить эти две таблицы в одну. Тогда запрос вообще станет тривиальным. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2014, 20:34 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovDavidkokoА если перевести базу в Firebird 2.5? Тогда у тебя они будут в распоряжении и запрос станет простым и элегантным. Но если ты с такой лёгкостью можешь манипулировать базой, то проще будет объединить эти две таблицы в одну. Тогда запрос вообще станет тривиальным. Dimitry Sibiryakov, огромнейшее спасибо! проверил в Firebird 2.5 и все правильно работает, и разницу sum(income)-sum(sales) считивает. если можно еще одинь вопрос:что вы имели ввиду когда писали: "проще будет объединить эти две таблицы в одну"? я всегда думал что в целях нормализации БД sales и incomes обьязательно должни быть в отдельных таблицах! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2014, 21:54 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
Davidkokoчто вы имели ввиду когда писали: "проще будет объединить эти две таблицы в одну"? я всегда думал что в целях нормализации БД sales и incomes обьязательно должни быть в отдельных таблицах! И какую же нормальную форму ты пытаешься воплотить в жизнь разделяя одну сущность "движение средств" на две таблицы?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2014, 22:02 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovDavidkokoчто вы имели ввиду когда писали: "проще будет объединить эти две таблицы в одну"? я всегда думал что в целях нормализации БД sales и incomes обьязательно должни быть в отдельных таблицах! И какую же нормальную форму ты пытаешься воплотить в жизнь разделяя одну сущность "движение средств" на две таблицы?.. еще раз спасибо, я много раз думал об этом, но никак не мог рисковать. Вы мне очен помогли! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2014, 22:17 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
народ подскажите как сумму выбрать? фб 1.5 Код: sql 1. 2. 3. 4. Can't format message 13:896 -- message system code -4. Dynamic SQL Error. SQL error code = -104. Invalid expression in the ORDER BY clause (not contained in either an aggregate function or the GROUP BY clause). (3,058 с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 11:45 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
des1roer, накой тебе ORDER BY при подсчёте одной единственной суммы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 11:52 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
order был лишним Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 11:53 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, спс. Сам увидел. просто из более сложного запроса осталось)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 11:54 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
млин объясните нубу. вот этот запрос намертво ложит емс Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. вложенный запрос отрабатывает хоть и медленно (3 с), но корректно Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 12:46 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 12:55 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
des1roer, по мелочи D + T сделай уже вычисляемый столбец DT как D+T, чтобы не писать постоянно D+T FROM PROTOKOL left outer join CARGO CARGO1 либо не пиши алиасы совсем, либо пиши везде. from protocol p left join cargo c тут точно нужен left join? des1roerвложенный запрос отрабатывает хоть и медленно (3 с), но корректно вложенный запрос сначала выполняется целиком, потому что order by D + T desc приводит к PLAN SORT, т.е. сначала запрос выполнится, и отсортируется результат, а потом только будет выбрана его первая запись (first). И "намертво ложит емс" - емс тут ни при чем, он просто ждет ответа от сервера, а запрос выполняется очень долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 12:56 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
des1roer, сам виноват. Этот запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. наверняка не использует индекс. Попробуй создать вычисляемый индекс по D + T. По поводу запроса в целом. Такие подзапросы не материализуются, а следовательно будут перевыполняться на каждой итерации. Поэтому твои 3 сек будут умножены на количество записей основного запроса. Хранимая процедура или EB в котором эти запросы разделены на 2 поможет. Для понимания поможет вот эта статейка http://www.ibase.ru/devinfo/dataaccesspaths.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 12:56 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
что за вычисляемый индекс д+т? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 13:01 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 13:08 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. так что ли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 11:47 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
des1roer, вроде того. А ещё лучше если добавить в таблицу обычный столбец типа TIMESTAMP и вычислять его в триггерах before insert, before update. Тогда можно будет обычный индекс вешать, да и запрос упростится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 11:51 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
таблица не моя - единственное что могу - это дергать селектом. может ну его в болото, ложить в постгрес и уж оттуда выгребать нужные данные... млин а индекс не положит базу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 11:57 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
des1roer, индекс не может положить базу. Разве что вставка записей немного замедлится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 11:59 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
des1roer, вот этот блок поможет Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 12:07 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, прошу заметить у меня какашка firebird 1.5. Ругается Can't format message 13:896 -- message system code -4. Dynamic SQL Error. SQL error code = -104. Token unknown - line 1, column 9. BLOCK. (3,417 с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 12:23 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
тогда делай процедуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 12:28 |
|
||
|
выборка данных из 2 связанных таблиц с несколькими sum функциями
|
|||
|---|---|---|---|
|
#18+
ну его на кол этот таймстамп Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ------ QUERY PERFORMANCE ------ Prepare : 16 мс Execute : 31 мс Avg fetch time: 23 мс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 12:45 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38739978&tid=1563295]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
161ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 525ms |

| 0 / 0 |
