Эффективно группировать по столбцам

SELECT date, id, sum(revenue)
FROM table
WHERE date between '2013-01-01' and '2013-01-08'
GROUP BY date, id
HAVING sum(revenue)>1000

Возвращает строки с доходом>1000.

SELECT date, id, sum(revenue)
FROM table
WHERE date between '2013-01-01' and '2013-01-08'
AND id IN (SELECT id FROM table where date between '2013-01-01' and '2013-01-08' GROUP BY id HAVING sum(revenue)>1000)
GROUP BY date, id

Возвращает строки для идентификаторов, чей общий доход за период даты составляет> 1000 по желанию. Но этот запрос намного медленнее. Есть ли более быстрый способ сделать это?

2 ответа

Это не MySQL, это Vertica;)

Крис, какая проекция и order by вы используете в CREATE TABLE???

Вы пытаетесь использовать database designer см. http://my.vertica.com/docs/6.1.x/HTML/index.htm

Убедитесь, что у вас есть индексы на date а также id столбцы, и попробуйте этот вариант:

select t.date, t.id, sum(t.revenue)
from table t
inner join (
    select id
    from table
    where date between '2013-01-01' and '2013-01-08'
    group by id
    having sum(revenue) > 1000
) ts on t.id = ts.id
where t.date between '2013-01-01' and '2013-01-08'
group by t.date, t.id
Другие вопросы по тегам