Сумма рассчитанного поля - PullRequest
4 голосов
/ 24 мая 2011

У меня есть две таблицы:

  • table1 (a, b, c)
  • table2 (a, d, f)

Я хочу получить для каждого b, чтобы получить сумму умножения соответствующих d и f

данные таблицы 1

a   b      c
-------------
1   hello  3
2   bye    4

данные таблицы 2

a  d  f
--------
1  5  3
1  2  4
2  1  3
2  2  3

результат: привет: 5 * 3 + 2 * 4, пока: 1 * 3 + 2 * 3
Мой запрос:

  SELECT t1.a, 
         t2.d * t2.f AS m, 
         SUM(m)   
    FROM table1 AS t1, 
         table2 AS t2 
   WHERE t1.a = t2.a 
GROUP BY t1.b

Так что здесь не так? В mysql я получаю # 1054 - Неизвестный столбец «m» в «списке полей»

Ответы [ 2 ]

5 голосов
/ 24 мая 2011

Попробуйте:

SELECT t1.a, t2.d*t2.f AS m, SUM(t2.d*t2.f)
FROM table1 AS t1, table2 AS t2 
WHERE t1.a=t2.a GROUP BY t1.b

(т.е. разверните псевдоним)

4 голосов
/ 24 мая 2011

Вы не можете ссылаться на псевдоним столбца в одном и том же предложении SELECT - вам нужно либо воспроизвести формулу:

  SELECT t1.a, 
         t2.d * t2.f AS m, 
         SUM(t2.d * t2.f)   
    FROM table1 AS t1 
    JOIN table2 AS t2 ON t1.a = t2.a 
GROUP BY t1.b

.. или используйте производную таблицу / встроенное представление:

SELECT x.a,
       x.m, 
       SUM(x.m)
  FROM (SELECT t1.a, 
               t2.d * t2.f AS m
          FROM table1 AS t1 
          JOIN table2 AS t2 ON t1.a = t2.a 
      GROUP BY t1.b) x

Самым ранним MySQL, который позволяет ссылаться на псевдонимы столбцов, является предложение GROUP BY (HAVING и ORDER BY также поддерживают псевдонимы столбцов). Но большинство других баз данных поддерживают только с условием ORDER BY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...