#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 (). Время провести кое-какие исследования.