SQL SUM вопрос - PullRequest
       5

SQL SUM вопрос

0 голосов
/ 30 мая 2011

Привет У меня есть вопрос о сумме в sql,

У меня есть запрос, который выглядит следующим образом

SELECT 
 SUM ( table_one.field + table_two.field )  as total_field
 SUM ( total_field + table_one.anotherfield )
FROM 
 table_one
JOIN
 table_two ON table_one.id = table_two.id
WHERE 
 table_one = 1

Но это не работает (не возражайте против возможных ошибок ввода в JOINутверждение, только второй SUM - это, вероятно, запрос работает без него SUM)

Есть ли другой способ сделать это, так как мне нужно поле total_ в моем приложении.Я могу, конечно, добавить эти цифры в приложении, но я предпочитаю делать это в sql.

Ответы [ 5 ]

1 голос
/ 30 мая 2011

Нельзя использовать псевдоним столбца в совокупности для ссылки на значение, просто снова СУММА;

SELECT 
 SUM ( table_one.field + table_two.field ) as total_field, --your missing a , also
 SUM ( table_one.field + table_two.field + table_one.anotherfield )
FROM 
 table_one
JOIN
 table_two ON table_one.id = table_two.id
WHERE 
 table_one = 1
0 голосов
/ 30 мая 2011

Вы можете использовать такой подзапрос, как этот:

SELECT
  total_field,
  total_field + sum_anotherfield
FROM (
  SELECT 
    SUM(table_one.field + table_two.field) AS total_field,
    SUM(table_one.anotherfield) AS sum_anotherfield
  FROM 
    table_one
  JOIN
    table_two ON table_one.id = table_two.id
  WHERE 
    table_one.somefield = 1
) x
0 голосов
/ 30 мая 2011

Имя "total_field" является псевдонимом и поэтому не может использоваться в агрегатных функциях. Самый простой и быстрый способ - просто заменить код для total_field во втором вычислении.

SELECT
   SUM ( ISNULL(table_one.field,0) + ISNULL(table_two.field,0) )  as total_field
   SUM ( ISNULL(table_one.field,0) + ISNULL(table_two.field,0) +     IsNUll(table_one.anotherfield,0) )
from
  table_one

Поскольку ваш код не учитывает нулевое значение в полях, вы можете получать предупреждения при суммировании значений. Я бы предложил использовать IsNull, как указано выше, и если есть нулевое значение, просто обработайте его как 0.

0 голосов
/ 30 мая 2011

Попробуйте заменить "total_field" на "table_one.field + table_two.field" во втором SUM ().

0 голосов
/ 30 мая 2011

SUM - агрегатная функция. Это означает, что вы можете объединять данные из поля по нескольким кортежам и объединять их в один кортеж.

Что вы хотите сделать, это:

SELECT 
  table_one.field + table_two.field,
  table_one.field + table_two.field + table_one.anotherfield

или, может быть, это:

SELECT 
  SUM(table_one.field) + SUM(table_two.field),
  SUM(table_one.field) + SUM(table_two.field) + SUM(table_one.anotherfield)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...