powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подсчет разницы между двумя таблицами
25 сообщений из 43, страница 1 из 2
Подсчет разницы между двумя таблицами
    #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
Подсчет разницы между двумя таблицами
    #38401386
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hitenok,

может ли быть в одной таблице один код более одного раза?
...
Рейтинг: 0 / 0
Подсчет разницы между двумя таблицами
    #38401389
hitenok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, чтобы было понятнее, кодов примерно 100.
...
Рейтинг: 0 / 0
Подсчет разницы между двумя таблицами
    #38401390
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
коды в пределах каждой таблицы уникальны?
наборы кодов в разных таблицах совпадают или есть такие, что присутствуют только в одной?
...
Рейтинг: 0 / 0
Подсчет разницы между двумя таблицами
    #38401398
hitenok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
коды могут не совпадать, т.е. в одной кодов может быть больше, чем в другой.
Коды не уникальны, есть уникальный id.
...
Рейтинг: 0 / 0
Подсчет разницы между двумя таблицами
    #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
Подсчет разницы между двумя таблицами
    #38401407
hitenok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проверил, или я чет не понял или
#1054 - Unknown column 'sum' in 'field list'
...
Рейтинг: 0 / 0
Подсчет разницы между двумя таблицами
    #38401434
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hitenok, а, оно у вас "count" называется. Ну переделайте запрос, долго, что ли?
...
Рейтинг: 0 / 0
Подсчет разницы между двумя таблицами
    #38401437
hitenok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А, ток я не понял, что на что переделать, я же пишу не силен в запросах
SUM(SUM) на SUM(count)?
...
Рейтинг: 0 / 0
Подсчет разницы между двумя таблицами
    #38401443
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hitenok,

да
...
Рейтинг: 0 / 0
Подсчет разницы между двумя таблицами
    #38401445
hitenok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал заменить, все работает на вид как надо, спасибо большое!
...
Рейтинг: 0 / 0
Подсчет разницы между двумя таблицами
    #38401448
hitenok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно только получить небольшой комментарий, а что дает вот это
sum(case when t=1 then q else -q end) ?
Я все остальное понял, а это так и не догнал.
...
Рейтинг: 0 / 0
Подсчет разницы между двумя таблицами
    #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
Подсчет разницы между двумя таблицами
    #38401471
hitenok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,

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

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

Так как все-таки можно повысить производительность именно для вывода данных из таблицы? 13.1.13. CREATE INDEX Syntax
...
Рейтинг: 0 / 0
Подсчет разницы между двумя таблицами
    #38401598
hitenok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[/quot]Покажите план последнего запроса.[/quot]
Это как сделать?
...
Рейтинг: 0 / 0
Подсчет разницы между двумя таблицами
    #38401601
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И таки да, miksoftПокажите план последнего запроса.
...
Рейтинг: 0 / 0
Подсчет разницы между двумя таблицами
    #38401606
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hitenokПокажите план последнего запроса.
Это как сделать?хотя бы подставьте перед запросом слово EXPLAIN
...
Рейтинг: 0 / 0
Подсчет разницы между двумя таблицами
    #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
Подсчет разницы между двумя таблицами
    #38401617
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
теперь еще хорошо бы увидеть, что это за индекс code в каждой из таблиц
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подсчет разницы между двумя таблицами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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