Сумма, отличающаяся отдельным столбцом идентификатора

#sql #snowflake-cloud-data-platform

Вопрос:

У меня есть некоторые данные формы:

 ID  Value
A   2
B   2
C   3
A   2
A   2
C   3
B   2
 

Я хочу суммировать value по разным идентификаторам.

выбор sum(distinct value) from table даст сумму 2 и 3 = 5. Я этого не хочу, мне нужна сумма значений для каждого идентификатора, т. Е. A=2, B=2, C=3, есть 3 разных идентификатора, поэтому сумма(2,2,3) = 7.

В «sql-иш» я хочу что-то вроде select sum(distinct value by ID) from table . Возможно ли это?

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

1. С предоставленным вами набором данных, каков полный ожидаемый результат? A = 6, B = 4, C = 6 ?

2. @Джейк Ожидаемый результат-7. Сумма 2,2 и 3. Пытаюсь избежать подзапроса, если это возможно, по причинам, которые потребовали бы более подробного объяснения, и я стараюсь сохранить этот пост минималистичным. В идеале нужно найти способ сообщить sql, чтобы он сделал это в функции sum (), а не в подзапросе

Ответ №1:

Получите различные комбинации ID и Value в подзапросе, а затем сумму Value s:

 SELECT SUM(Value) sum_value
FROM (SELECT DISTINCT ID, Value FROM tablename) t
 

Другой способ сделать это-с SUM() помощью функции окна:

 SELECT DISTINCT SUM(MAX(Value)) OVER() sum_value
FROM tablename
GROUP BY ID
 

Смотрите демонстрацию.

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

1. Спасибо за это! Просто пытаюсь прочитать и истолковать ваш второй вариант, с чем происходит ... OVER() sum_value ? Здесь есть sum_value псевдоним?

2. @user14328853 да, это псевдоним суммы.

3. Хм, я никогда не сталкивался с этой функцией OVER (). Время провести кое-какие исследования.