powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите понять работу SUM & JOIN
12 сообщений из 12, страница 1 из 1
Помогите понять работу SUM & JOIN
    #38762759
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Досталось мне в наследство большое количество аналитических запросов, которые нужно перевести на новую базу данных. Оно конечно можно и тупо попытаться переписать, но с детства люблю Товарища Сухова с его выражением: "Лучше, конечно, помучиться."

Поясните пожалуйста почему этот запрос выдает одно, а когда убираю джоины совсем другое хотя запросы все к одной и той же таблице. Как джоины то работают c SUM? Могу привести списки статей про JOIN:

http://kreker.org/items/5
http://www.anton-pribora.ru/articles/mysql/mysql-join

ни одна из этих статей не объясняет мой вопрос.

1.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT imp.pricing_type,
            SUM(IF((imp.pricing_type = 'CPMV' or imp.pricing_type = 'CPMVbid')
            , imp.advertiser_spent, IF((imp.pricing_type = 'CPA' and con.decision_id IS NOT NULL)
            , con.advertiser_payout,0))) AS count_payout
            FROM v18_20140923 AS imp
            JOIN EACH v18_20140923 AS dec on imp.decision_id=dec.decision_id
            LEFT JOIN v18_20140923 AS con on con.decision_id=imp.decision_id
            
            WHERE  
            imp.mail_type = 'newsletter' 
            and imp.country = 'US' 
            and imp.demand_type = 'default' 
            and imp.advertiser_id <> 29 
            and imp.pricing_type <> 'CPC' 
            and imp.campaign_type = 'LIA' 
            
            GROUP BY imp.pricing_type;



результат1 CPMV 32265.02009959082
2 CPA 1.1980484753180737E7
3 CPMVbid 21676.31267523582

2.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT imp.pricing_type,
            SUM(IF((imp.pricing_type = 'CPMV' or imp.pricing_type = 'CPMVbid')
            , imp.advertiser_spent, IF((imp.pricing_type = 'CPA' and con.decision_id IS NOT NULL)
            , con.advertiser_payout,0))) AS count_payout
            FROM v18_20140923 AS imp
            LEFT JOIN v18_20140923 AS con on con.decision_id=imp.decision_id
            
            WHERE  
            imp.mail_type = 'newsletter' 
            and imp.country = 'US' 
            and imp.demand_type = 'default' 
            and imp.advertiser_id <> 29 
            and imp.pricing_type <> 'CPC' 
            and imp.campaign_type = 'LIA' 
            
            GROUP BY imp.pricing_type;



результат Row imp_pricing_type count_payout
1 CPMVbid 21097.13375782354
2 CPA 218307.45131600025
3 CPMV 34099.79351488262

3.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT imp.pricing_type,
            SUM(IF((imp.pricing_type = 'CPMV' or imp.pricing_type = 'CPMVbid')
            , imp.advertiser_spent, IF((imp.pricing_type = 'CPA' and imp.decision_id IS NOT NULL)
            , imp.advertiser_payout,0))) AS count_payout
            FROM v18_20140923 AS imp
            
            WHERE  
            imp.mail_type = 'newsletter' 
            and imp.country = 'US' 
            and imp.demand_type = 'default' 
            and imp.advertiser_id <> 29 
            and imp.pricing_type <> 'CPC' 
            and imp.campaign_type = 'LIA' 
            
            GROUP BY imp.pricing_type;



результатRow imp_pricing_type count_payout
1 CPA 2.5315054309997848E8
2 CPMV 34098.059514882625
3 CPMVbid 21097.08847582354


Поясните, пожалуйста, почему такое разное поведение в каждом случае? Либо ткните в какую-нибудь хорошую документацию чтобы поясняло не просто как работает JOIN, а именно JOIN & SUM

Заранее спасибо
...
Рейтинг: 0 / 0
Помогите понять работу SUM & JOIN
    #38762780
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnews,


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

Лучше скажите словами что надо и покажите маленький пример.
...
Рейтинг: 0 / 0
Помогите понять работу SUM & JOIN
    #38762793
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, зачем в первом запросе таблица с алиасом dec? она там нигде не используется.
alexnewsчтобы поясняло не просто как работает JOIN, а именно JOIN & SUMа что там пояснять? джойн перемножает таблицы (все, а не попарно!), а сум() считает сумму выбранных полей или выражений.
Сделайте 3 таблицы с 2 записями в каждой и покрутите на них джойны с суммами - всё станет ясно.
...
Рейтинг: 0 / 0
Помогите понять работу SUM & JOIN
    #38762847
Anatoly B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirИнтересно, зачем в первом запросе таблица с алиасом dec? она там нигде не используется.


Используется, при условии что decision_id не уникален и содержит дублирующие значения. Это так?
...
Рейтинг: 0 / 0
Помогите понять работу SUM & JOIN
    #38762988
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly BtanglirИнтересно, зачем в первом запросе таблица с алиасом dec? она там нигде не используется.


Используется, при условии что decision_id не уникален и содержит дублирующие значения. Это так?это, мягко говоря, весьма оригинальный вариант использования
я скорее поверю, что писавший сей запрос просто не понимал, что пишет
...
Рейтинг: 0 / 0
Помогите понять работу SUM & JOIN
    #38763676
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirAnatoly Bпропущено...


Используется, при условии что decision_id не уникален и содержит дублирующие значения. Это так?это, мягко говоря, весьма оригинальный вариант использования
я скорее поверю, что писавший сей запрос просто не понимал, что пишет

как по мне всё понятно...и вообщето логично.

в теме до этого про обновление таблицы с -100 у одной записи и + 100 другой записи, подобный финт использовался в решении.

есть таблица1, есть таблица2

надо сделать выборку из таблицы1, но только тех записей, для которых есть некое соответсвие в таблице2. делаем джоин и тем самым отфильтровываем не нужное.
...
Рейтинг: 0 / 0
Помогите понять работу SUM & JOIN
    #38763686
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453, а если внимательно посмотреть? там одна и та же таблица джойнится, причём в первый раз каким-то марсианским оператором "join each", про который я даже нагуглить ничего не могу, а второй раз лефт джойном - навряд ли это "отсеивание лишних"
...
Рейтинг: 0 / 0
Помогите понять работу SUM & JOIN
    #38763720
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tangliralex564657498765453, а если внимательно посмотреть? там одна и та же таблица джойнится, причём в первый раз каким-то марсианским оператором "join each", про который я даже нагуглить ничего не могу, а второй раз лефт джойном - навряд ли это "отсеивание лишних"

согласен , я прсомотрел, но и ты согласись - первый джоин работает как фильтр, а второй что уже лефт, что не лефт, уже както побую...

ЗЫ
я тоже большими глазами посмотрел на JOIN EACH

зато на гуглил внимательней тебя :)
когда таблицы большие, используеться join each
(типо просто джоин строит таблицу пересечения, а модификатор ич для больших таблиц нужен, дабы указать что не строить сразу результат пересечения)
и да это не мускл. это какоето гугл сольюшин
...
Рейтинг: 0 / 0
Помогите понять работу SUM & JOIN
    #38763851
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirAnatoly Bпропущено...
Используется, при условии что decision_id не уникален и содержит дублирующие значения. Это так?это, мягко говоря, весьма оригинальный вариант использования
я скорее поверю, что писавший сей запрос просто не понимал, что пишет
После моего вопроса создателю сего деяния зачем нужен этот dec джоин он сослался на другой джоин где это было использовано, тем самым дав понять что не знает о чем идет речь. И это к сожалению только самый маленький пример чего они пишут, похоже не понимая половины написанного.
...
Рейтинг: 0 / 0
Помогите понять работу SUM & JOIN
    #38763864
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453tangliralex564657498765453, а если внимательно посмотреть? там одна и та же таблица джойнится, причём в первый раз каким-то марсианским оператором "join each", про который я даже нагуглить ничего не могу, а второй раз лефт джойном - навряд ли это "отсеивание лишних"

зато на гуглил внимательней тебя :)
когда таблицы большие, используеться join each
(типо просто джоин строит таблицу пересечения, а модификатор ич для больших таблиц нужен, дабы указать что не строить сразу результат пересечения)
и да это не мускл. это какоето гугл сольюшин

alex564657498765453, вы полностью правы это Гугл запросы для больших таблиц https://cloud.google.com/bigquery/query-reference, в каждой таблице примерно по 60-80 млн данный в день. Так как очень похоже на обычный sql запрос и я должен отвечать за mysql, то и решил задать вопрос тут.
...
Рейтинг: 0 / 0
Помогите понять работу SUM & JOIN
    #38764196
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стоп. Стоп-стоп-стоп. Оказывается, я в прошлый раз не до конца осознал маньячность этого запроса. Смотрим внимательно:alexnews
Код: sql
1.
2.
3.
FROM v18_20140923 AS imp
  JOIN EACH v18_20140923 AS dec on imp.decision_id=dec.decision_id
  LEFT JOIN v18_20140923 AS con on con.decision_id=imp.decision_id

таблица три раза джойнится сама с собой, причём по одному и тому же полю (т.е. это не связь "родитель-потомок" или что-то подобное). Ну ладно, может, первый джойн нужен для какого-то хитрого расчёта (заквадратить количество найденных строк в каждой группе - хз кому и зачем такое может понадобиться, ну да ладно). Но второй! Лефт джойн таблицы саму на себя по одному и тому же полю? Зачем тут лефт?!
alex564657498765453зато на гуглил внимательней тебя :)прикол в том, что по запросу "join each" мне гугл выдавал всё, что угодно, в том числе и эту тему, но только не инфу о своих же технологиях :)
...
Рейтинг: 0 / 0
Помогите понять работу SUM & JOIN
    #38764308
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,

мдя... видать ТС зная логику таблицы, хуже мускл, но зная что должно получаться и видя ЭТО...этот запрос и его работу... не мудрено что он не мог понять как джоин работают...

походу тут никто не понимает , как в даном случае задействован джоин.:)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите понять работу SUM & JOIN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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