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

Поясните пожалуйста почему этот запрос выдает одно, а когда убираю джоины совсем другое хотя запросы все к одной и той же таблице. Как джоины то работают 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
01.10.2014, 02:47:12
    #38762780
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять работу SUM & JOIN
alexnews,


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

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


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


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


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

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

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

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

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

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

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

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

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

alex564657498765453, вы полностью правы это Гугл запросы для больших таблиц https://cloud.google.com/bigquery/query-reference, в каждой таблице примерно по 60-80 млн данный в день. Так как очень похоже на обычный sql запрос и я должен отвечать за mysql, то и решил задать вопрос тут.
...
Рейтинг: 0 / 0
02.10.2014, 06:08:05
    #38764196
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять работу SUM & JOIN
Стоп. Стоп-стоп-стоп. Оказывается, я в прошлый раз не до конца осознал маньячность этого запроса. Смотрим внимательно: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
02.10.2014, 09:37:42
    #38764308
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять работу SUM & JOIN
tanglir,

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

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


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