2013-12-21 2 views
0
SELECT tm.MAGAZINE_ID,`MAGAZINE_NAME`, 
CASE WHEN tsd.no_of_issues IS NULL THEN 1 ELSE tsd.no_of_issues 
END AS Subscription_Type, 
sum(tu.units) AS Total_sales, 
SUM(CASE WHEN customer_currency='USD' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_USD, 
SUM(CASE WHEN customer_currency='CAD' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_CAD, 
SUM(CASE WHEN customer_currency='CNY' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_CNY, 
SUM(CASE WHEN customer_currency='EUR' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_EUR, 
SUM(CASE WHEN customer_currency='GBP' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_GBP, 
SUM(CASE WHEN customer_currency='AUD' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_AUD, 
SUM(CASE WHEN customer_currency='MXN' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_MXN, 
SUM(CASE WHEN customer_currency='CHF' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_CHF, 
SUM(CASE WHEN customer_currency='NZD' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_NZD, 
SUM(CASE WHEN customer_currency='DKK' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_DKK, 
SUM(CASE WHEN customer_currency='NOK' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_NOK, 
SUM(CASE WHEN customer_currency='JPY' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_JPY, 
SUM(CASE WHEN customer_currency='SEK' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_SEK, 
SUM(CASE WHEN customer_currency='SGD' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_SGD, 
SUM(CASE WHEN customer_currency='TWD' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_TWD, 
SUM(CASE WHEN customer_currency='HKD' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_HKD, 
SUM(CASE WHEN customer_currency='CNY' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_CNY, 
SUM(CASE WHEN customer_currency='IDR' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_IDR, 
SUM(CASE WHEN customer_currency='AED' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_AED, 
SUM(CASE WHEN customer_currency='SAR' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_SAR, 
SUM(CASE WHEN customer_currency='ILS' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_ILS, 
SUM(CASE WHEN customer_currency='RUB' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_RUB, 
SUM(CASE WHEN customer_currency='ZAR' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_ZAR, 
SUM(CASE WHEN customer_currency='TRY' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_TRY, 
SUM(CASE WHEN customer_currency='INR' THEN tu.developer_proceeds * tu.units ELSE 0 END) AS Revenue_INR 
FROM `tbl_itunes_report` tu 
LEFT JOIN tbl_magazine_subscription_dtl tsd ON tsd.subscription_key = tu.sku_key AND ((tu.begin_date >= tsd.start_date AND tu.begin_date < tsd.end_date) OR (tu.begin_date >= tsd.start_date AND tsd.end_date = '0000-00-00')) 
LEFT JOIN tbl_magazine_subscription ts ON ts.magazine_subscription_id = tsd.subs_id LEFT JOIN tbl_magazine_issue ti ON ti.PurchaseKey = tu.sku_key AND ti.OS_SELECT = 0 
LEFT JOIN tbl_magazine tm ON tm.magazine_id = ts.magazine_id OR tm.magazine_id = ti.magazine_id 
WHERE `product_type_identifier` LIKE 'IA%' 
AND (tsd.subscription_key IS NOT NULL OR ti.PurchaseKey IS NOT NULL) 
AND tu.report_from = 'ecmedia' AND `units` >0 AND tu.begin_date >= "2013-12-01" 
AND tu.begin_date <= "2013-12-21" AND tm.publisher_id = 120 
GROUP BY tm.MAGAZINE_ID,tsd.no_of_issues 
ORDER BY tm.magazine_name,tsd.no_of_issues 

Я использую этот запрос для создания моего отчета. Когда я выполняю этот запрос с tm.publisher_id = 120. Он работает нормально, но когда я добавляю, что по моему запросу время выполнения увеличивается. Что-то не так с этим запросом, который вы видите?mysql запрос не работает при добавлении, где условие

+0

вы должны найти funcntion для EXPLAIN для mysql, это поможет понять, почему запрос займет больше времени. –

+0

У вас есть индекс, созданный в 'tm.publisher_id' в вашей базе данных? Если вы этого не сделаете, это может значительно замедлить такой запрос. В противном случае, что @JoeT сказал, это ваш лучший выбор, поскольку вы используете множество агрегатных функций, встроенные условные операторы, множественные объединения и инструкцию 'ORDER BY', выполняющие сортировку, все из которых делают запросы медленнее. – Anton

+0

Это один адский вопрос. Вы уверены, что нет более простого способа сделать это? Это не так, само по себе, но вы не должны удивляться, если этот запрос идет медленно; он должен сделать много работы, чтобы добиться результата. Чем больше таблиц, тем медленнее это станет. –

ответ

0

Помимо правильной индексации, так как вы используете внешнее соединение вы, скорее всего, хотите, чтобы переместить любое условие, которое Вы применяете к столу справа от LEFT JOIN (tm.publisher_id = 120) от WHERE пункта до ON пункта, соединяющего

... 
LEFT JOIN tbl_magazine tm 
    ON (tm.magazine_id = ts.magazine_id OR 
     tm.magazine_id = ti.magazine_id) 
AND tm.publisher_id = 120 
... 
Смежные вопросы