2013-05-03 4 views
0

У меня есть запросMysql - получить самые высокие и самые низкие результаты 5

SELECT dmn_name AS domain, COUNT(*) AS newsletters, SUM(mwl_sended) AS emailsSent, SUM(IFNULL(nwl_ca, 0)/mwl_sended) * 1000 AS ecpm FROM domain 
       JOIN newsletter USING(dmn_id) 
       WHERE dmn_actif = 1 
       AND nwl_sendedOn > DATE_SUB(NOW(), INTERVAL 1 MONTH) 
       AND nwl_sendingEndedOn is NOT NULL 
       GROUP BY dmn_name 
       ORDER BY ecpm DESC 
       LIMIT 5 

возвращает 5 результатов, имеющих высокий еСРМ. Как мне изменить его, чтобы вернуть 5 наивысших И 5 наименьших? Я хочу избежать выполнения запроса два раза.

Благодаря

+0

нет никакого практического способа сделать «двойной зоны» в результате подобного. вы можете подделать один запрос, используя объединение, и каждый подзапрос использует материал max/min, но теперь у вас есть 3 запросов. –

ответ

1

Использование UNION ALL

SELECT dmn_name AS domain, COUNT(*) AS newsletters, SUM(mwl_sended) AS emailsSent, SUM(IFNULL(nwl_ca, 0)/mwl_sended) * 1000 AS ecpm FROM domain 
       JOIN newsletter USING(dmn_id) 
       WHERE dmn_actif = 1 
       AND nwl_sendedOn > DATE_SUB(NOW(), INTERVAL 1 MONTH) 
       AND nwl_sendingEndedOn is NOT NULL 
       GROUP BY dmn_name 
       ORDER BY ecpm DESC 
       LIMIT 5 
UNION ALL 
SELECT dmn_name AS domain, COUNT(*) AS newsletters, SUM(mwl_sended) AS emailsSent, SUM(IFNULL(nwl_ca, 0)/mwl_sended) * 1000 AS ecpm FROM domain 
       JOIN newsletter USING(dmn_id) 
       WHERE dmn_actif = 1 
       AND nwl_sendedOn > DATE_SUB(NOW(), INTERVAL 1 MONTH) 
       AND nwl_sendingEndedOn is NOT NULL 
       GROUP BY dmn_name 
       ORDER BY ecpm ASC 
       LIMIT 5 
ORDER BY ecpm DESC 
+0

Я бы, вероятно, использовал 'UNION ALL' – Kermit

+0

Это хороший момент. Мы не хотим считать, что результаты каждого SELECT не пересекаются. –

+0

Спасибо, я думал о союзах и подзапросах. Если нет другого варианта, я думаю, что UNION ALL - лучшее решение. Хотя небольшое замечание - первый и второй SELECT должны быть заключены в скобки. спасибо –

Смежные вопросы