SQL для суммирования только новых значений - PullRequest
2 голосов
/ 13 июля 2010

У меня есть такая таблица

NAME    VALUE
-----------------
bla      1
bla      2
bla      2
bla      3
bla      1
bla      4
bla      2

Как мне сделать сумму ТОЛЬКО разных значений и игнорировать повторяющиеся значения (возможно ли это?)?Примерно так:

 SELECT SUM(??condition?? value) as total FROM table

И сумма должна быть 10.

Спасибо!

Ответы [ 3 ]

6 голосов
/ 13 июля 2010

Разве не

SELECT SUM(DISTINCT value) FROM mytable;

добьются цели?

5 голосов
/ 13 июля 2010

Это должно работать:

SELECT SUM(value) as total FROM (SELECT DISTINCT value FROM table) tmp;

Источник: http://forums.mysql.com/read.php?97,203188,203787#msg-203787

SELECT SUM(DISTINCT value) as total FROM table

Источник: http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html#function_sum

Второе решение лучше, потому что оно не создает временную таблицу. Поэтому это быстрее.

4 голосов
/ 13 июля 2010

Если вы хотите суммировать все различные значения, вы можете использовать DISTINCT:

SELECT SUM(DISTINCT value) AS total FROM yourtable

Если вы хотите рассчитать различную сумму для каждого имени, добавьте GROUP BY:

SELECT name, SUM(DISTINCT value) AS total 
FROM yourtable
GROUP BY name

Или рассмотреть только конкретное имя:

SELECT SUM(DISTINCT value) AS total 
FROM yourtable
WHERE name = 'bla'
...