Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MySQL, суммирование данных из неск. таблиц 
:(
    Опции темы
Akina
Дата 7.5.2008, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Сортировка в подзапросе не имеет смысла.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
hollywood
Дата 9.5.2008, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 20.10.2007

Репутация: нет
Всего: нет



История продолжается... Итак, ценой неимоверных умственных усилий мы получили-таки табличку:

vasya  2  3
fedya  3  5
misha  3  4
 smile 

теперь сверхзадача заключается в том, чтобы к оной табличке в конец добавить строчку со сводным суммированием, т.е. нужна таблица:

vasya  2  3
fedya  3  5
misha  3  4
total   8   12

для получения изначальной таблицы использовал вариант с UNION-ами:

Код

SELECT name, SUM(quant) AS agr_quant, SUM(cost) AS agr_cost    
FROM (    
 SELECT user_id, quant, cost    
 FROM table_1    
 UNION ALL    
 SELECT user_id, quant, cost    
 FROM table_2    
) AS Total    
RIGHT JOIN users ON Total.user_id = users.id    
WHERE cost IS NOT NULL        
GROUP BY user_id


попробовал решить текущую задачу таким макаром:

Код

(
SELECT name, SUM(quant) AS agr_quant, SUM(cost) AS agr_cost    
FROM (    
 SELECT user_id, quant, cost    
 FROM table_1    
 UNION ALL    
 SELECT user_id, quant, cost    
 FROM table_2    
) AS Total    
RIGHT JOIN users ON Total.user_id = users.id    
WHERE cost IS NOT NULL        
GROUP BY user_id
)
UNION ALL
(
SELECT 'Итого', SUM( `agr_price` ) , SUM( `agr_profit` ) 
FROM `Total`
)


Мускул справедливо вопрошает, чего я покурил и откуда взял Total во втором запросе верхнего (по уровню вложения) UNION-а. Понять я его, конечно могу  smile. Чего я не могу понять, так это как получить заветную строчку с "Итого" в конец моей таблички...  smile

Можно как-нибудь задать глобальную пользовательскую переменную с таблицей Total? С тем, чтобы результаты можно было использовать и в других SELECT-ах. Или как это лучше сделать?

Это сообщение отредактировал(а) hollywood - 9.5.2008, 12:55
PM MAIL   Вверх
skyboy
Дата 9.5.2008, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 15
Всего: 260



Цитата(hollywood @  9.5.2008,  11:53 Найти цитируемый пост)
Можно как-нибудь задать глобальную пользовательскую переменную с таблицей Total?

создать временную(TEMPORARY) таблицу (возможно, будет ещё быстрее, если создать в памяти(ENGINE=MEMORY)). заполнить. временная таблица с точки зрения каждого отдельного connection к базе имеет уникальное содержимое. и сможешь в своих запросах до закрытия подключения к БД использовать любое количество раз smile
PM MAIL   Вверх
hollywood
Дата 10.5.2008, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 20.10.2007

Репутация: нет
Всего: нет



Спасибо, вариант интересный. Стоит того, чтобы с ним хотя бы поковыряться. Я вот тут только голову ломаю: может не стоит заморачиваться с запросом, а конечную сумму в скрипте уже посчитать? Это, конечно, уже не так красиво выглядит, но я опасаюсь за быстродействие... По сравнению с реализацией суммирования в php во время итерирования по результатам запроса - создание временной таблицы в памяти сильно медленнее должно быть?..
PM MAIL   Вверх
Fortop
Дата 10.5.2008, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 2
Всего: 42



hollywood
Если у тебя 3 строки в итоговом запросе - то где хочешь, там и суммируй.
Ты еще не знаешь своих узких мест, а уже пытаешься оптимизировать.

Сделай два запроса и не мучайся. 

Вот когда наступит время оптимизации, тогда и будешь думать, выбирать ли во временную таблицу или посчитать в скрипте.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0897 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.