Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подсчет разницы между двумя таблицами / 25 сообщений из 43, страница 1 из 2
19.09.2013, 13:12:34
    #38401380
hitenok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
Народ, добрый.
Прошу помощи в решении задачки.
Я программер, в sql не особо шарю.

Задача:
Есть две таблицы по 1`000`000 записей каждая, где храниться код и количество.
Коды одинаковые, количество разное.
Требуется получить код и разницу между суммой одинаковых кодов.

Пример:
таблица 1 таблица 2
код количество код количество
001 5 002 3
002 7 003 4
003 6 001 8

Что хочу на выходе:
код разница
001 -3
002 4
003 2

Что пишу для этого, (хотя уверен, что скорее всего бред, а не запрос):
SELECT `t`.`code` as `tc`, `d`.`code` as `dc`, COUNT(`t`.`count`)-COUNT(`d`.`count`) as `c` FROM `test` as `t`, `demo` as `d` GROUP BY `t`.`code`, `d`.`code` ORDER BY `t`.`code`

Что получаю:
А ничего не получаю, как нетрудно догадаться, сервак виснет в глухую.
Куда копать?
...
Рейтинг: 0 / 0
19.09.2013, 13:14:42
    #38401386
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
hitenok,

может ли быть в одной таблице один код более одного раза?
...
Рейтинг: 0 / 0
19.09.2013, 13:15:17
    #38401389
hitenok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
да, чтобы было понятнее, кодов примерно 100.
...
Рейтинг: 0 / 0
19.09.2013, 13:15:36
    #38401390
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
коды в пределах каждой таблицы уникальны?
наборы кодов в разных таблицах совпадают или есть такие, что присутствуют только в одной?
...
Рейтинг: 0 / 0
19.09.2013, 13:16:45
    #38401398
hitenok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
коды могут не совпадать, т.е. в одной кодов может быть больше, чем в другой.
Коды не уникальны, есть уникальный id.
...
Рейтинг: 0 / 0
19.09.2013, 13:17:37
    #38401400
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
hitenokда, чтобы было понятнее, кодов примерно 100.а, ну тогда терпимо :)
Код: sql
1.
2.
3.
4.
5.
select code,sum(case when t=1 then q else -q end) as delta from (
 select code,1 t,sum(sum) q from tbl1 group by 1,2
 UNION ALL
 select code,2 t,sum(sum) q from tbl2 group by 1,2
) t0 group by 1
...
Рейтинг: 0 / 0
19.09.2013, 13:19:36
    #38401407
hitenok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
Проверил, или я чет не понял или
#1054 - Unknown column 'sum' in 'field list'
...
Рейтинг: 0 / 0
19.09.2013, 13:30:24
    #38401434
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
hitenok, а, оно у вас "count" называется. Ну переделайте запрос, долго, что ли?
...
Рейтинг: 0 / 0
19.09.2013, 13:31:56
    #38401437
hitenok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
А, ток я не понял, что на что переделать, я же пишу не силен в запросах
SUM(SUM) на SUM(count)?
...
Рейтинг: 0 / 0
19.09.2013, 13:34:05
    #38401443
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
hitenok,

да
...
Рейтинг: 0 / 0
19.09.2013, 13:34:54
    #38401445
hitenok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
Попробовал заменить, все работает на вид как надо, спасибо большое!
...
Рейтинг: 0 / 0
19.09.2013, 13:36:15
    #38401448
hitenok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
Можно только получить небольшой комментарий, а что дает вот это
sum(case when t=1 then q else -q end) ?
Я все остальное понял, а это так и не догнал.
...
Рейтинг: 0 / 0
19.09.2013, 13:39:14
    #38401455
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
Немного проще:
Код: sql
1.
2.
3.
4.
5.
6.
7.
select код, sum(q) as разница
from (
  select код, sum(количество) as q from таблица1 group by код
  UNION ALL
  select код,-sum(количество) as q from таблица2 group by код
  ) u 
group by код
...
Рейтинг: 0 / 0
19.09.2013, 13:45:38
    #38401471
hitenok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
Cygapb-007,

Работает, и результат тот же, но чуть быстрее и вам спасибо, тут мне вообще весь запрос ясен, хотя сам бы я до него не додумался.
...
Рейтинг: 0 / 0
19.09.2013, 13:52:16
    #38401482
hitenok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
Ребят, спасибо за помощь, реально помогли, а то я уже устал сервак перезапускать, чтобы попробовать очередной запрос.
...
Рейтинг: 0 / 0
19.09.2013, 13:54:59
    #38401486
hitenok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
Последний вопрос, а можно ли этот запрос оптимизировать, так как выполняется он почти 2 секунды?
...
Рейтинг: 0 / 0
19.09.2013, 14:43:58
    #38401560
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
не уникальный индекс (код, количество) - занимает много места, таблица дольше обновляется, но запрос считает быстро
не уникальный индекс (код) - занимает меньше места, таблица чуть быстрее обновляется, но запрос считает медленнее
без индекса - не занимает места под индекс, таблица обновляется быстро , но запрос считает очень долго :)
...
Рейтинг: 0 / 0
19.09.2013, 14:57:25
    #38401579
hitenok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
Cygapb-007,

Так как все-таки можно повысить производительность именно для вывода данных из таблицы?
...
Рейтинг: 0 / 0
19.09.2013, 15:01:00
    #38401586
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
hitenokТак как все-таки можно повысить производительность именно для вывода данных из таблицы?Покажите план последнего запроса.
...
Рейтинг: 0 / 0
19.09.2013, 15:05:38
    #38401597
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
hitenokCygapb-007,

Так как все-таки можно повысить производительность именно для вывода данных из таблицы? 13.1.13. CREATE INDEX Syntax
...
Рейтинг: 0 / 0
19.09.2013, 15:06:03
    #38401598
hitenok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
[/quot]Покажите план последнего запроса.[/quot]
Это как сделать?
...
Рейтинг: 0 / 0
19.09.2013, 15:07:10
    #38401601
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
И таки да, miksoftПокажите план последнего запроса.
...
Рейтинг: 0 / 0
19.09.2013, 15:08:05
    #38401606
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
hitenokПокажите план последнего запроса.
Это как сделать?хотя бы подставьте перед запросом слово EXPLAIN
...
Рейтинг: 0 / 0
19.09.2013, 15:09:12
    #38401608
hitenok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
Код: plaintext
1.
2.
3.
4.
id	select_type	table		type	possible_keys	key	key_len	ref	rows	Extra
1	PRIMARY		<derived2>	ALL	NULL		NULL	NULL	NULL	202	Using temporary; Using filesort
2	DERIVED		test		index	NULL		code	4	NULL	252140	 
3	UNION		demo		index	NULL		code	4	NULL	208868	 
NULL	UNION RESULT	<union2,3>	ALL	NULL		NULL	NULL	NULL	NULL
...
Рейтинг: 0 / 0
19.09.2013, 15:14:22
    #38401617
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет разницы между двумя таблицами
теперь еще хорошо бы увидеть, что это за индекс code в каждой из таблиц
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подсчет разницы между двумя таблицами / 25 сообщений из 43, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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