Группировать значения суммы по столбцам, но невозможно «агрегировать»?

#sql #group-by #amazon-redshift

#sql #группировать по #amazon-redshift

Вопрос:

Я хочу суммировать количество раз, когда были достигнуты пороговые значения в соответствии с 2 разными значениями: датой и элементом.

Redshift выдает мне сообщение об ошибке с запросом дополнительных столбцов в group by (которые я не хочу в group by: «столбец должен отображаться в предложении group by или использоваться в агрегатной функции»).

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

Что у меня есть

 |------------|--------|------------|
| item_type  | date   |thresh_rchd |
|------------|--------|------------|
|    baby    |monday  |      2     |
|------------|--------|------------|
|    tom     |monday  |      6     |
|------------|--------|------------|
|    baby    |monday  |      8     |
|------------|--------|------------|
|    baby    |tuesday |      4     |
|------------|--------|------------|
  

Чего я хочу:

 |------------|--------|------------|-------------|
| item_type  | date   |thresh_rchd |total thresh |
|------------|--------|------------|-------------|
|    baby    |monday  |      2     |     10      |
|------------|--------|------------|-------------|
|    tom     |monday  |      6     |      6      |
|------------|--------|------------|-------------|
|    baby    |monday  |      8     |     10      |
|------------|--------|------------|-------------|
|    baby    |tuesday |      4     |      4      |
|------------|--------|------------|-------------|
  

Ответ №1:

вы можете попробовать, как показано ниже, используя функцию window

 select item_type, date, thresh_rchd, 
       sum(thresh_rchd) over(partition by item_type, date) as total_thresh
from tablename
  

Комментарии:

1. кажется, работает отлично! будет продолжать использовать over и partition by, когда group by не сокращает его! Спасибо

Ответ №2:

 select t1.item_type,t1.date,t1.thresh_rchd,t2.total
from <table> t1
inner join
(
select item_type,date,sum(thresh_rchd) total from <table>
group by item_type,date) t2
on t1.item_type=t2.item_type
and t1.date=t2.date