СУММА (a * b) не работает - PullRequest
       27

СУММА (a * b) не работает

2 голосов
/ 05 декабря 2009

У меня есть страница PHP, работающая в postgres. У меня есть 3 таблицы - рабочие заказы , wo_parts и part2vendor . Я пытаюсь умножить 2 строки данных столбца таблицы вместе, то есть wo_parts имеет поле с именем кол-во , а part2vendor имеет поле с именем стоимость, Эти 2 соединены wo_parts.pn и part2vendor.pn . Я создал такой запрос:

$scoreCostQuery = "SELECT SUM(part2vendor.cost*wo_parts.qty) as total_score 
                       FROM part2vendor 
                       INNER JOIN wo_parts 
                         ON (wo_parts.pn=part2vendor.pn)  
                       WHERE workorder=$workorder";

Но если я добавлю стоимость частей, умноженную на предоставленные количества, это прибавит к другому числу, чем то, что делает сценарий. Помогите .... Я новичок в этом, но если кто-то может показать мне в SQL, я могу изменить его для postgres. Спасибо

Ответы [ 3 ]

2 голосов
/ 06 декабря 2009

Не видя пример данных, мы не сможем узнать, почему итоговые данные вашего запроса получаются иначе, чем когда вы выполняете математику вручную. Это может быть плохое соединение, поэтому вы получаете больше / меньше записей, чем ожидали. Также возможно, что ваши расчеты выключены. Выберите пример с наименьшим количеством связанных записей и сравните.

Я предлагаю добавить GROUP BY к запросу:

  SELECT SUM(p.cost * wp.qty) as total_score 
    FROM part2vendor p
    JOIN wo_parts wp ON wp.pn = p.pn 
   WHERE workorder = $workorder
GROUP BY workorder

К вашему сведению: MySQL был предназначен для обеспечения гибкости в GROUP BY, в то время как никакой другой БД, который я использовал, не дает - это источник многочисленных вопросов по SO "почему это работает в MySQL, когда он не работает на БД х ... ".

Чтобы убедиться, что ваши количества верны:

SELECT wp.qty,
       p.cost
  FROM WO_PARTS wp
  JOIN PART2VENDOR p ON p.pn = wp.pn
 WHERE p.workorder = $workorder

Убедитесь, что цифры верны для данного заказа.

0 голосов
/ 06 декабря 2009

В вопросе вы говорите, что столбец cost находится в part2vendor, но в запросе вы ссылаетесь на wo_parts.cost. Если таблица wo_parts имеет собственный столбец cost, это является источником проблемы.

0 голосов
/ 05 декабря 2009

Вместо этого вы можете попробовать подзапрос.
(Обратите внимание, у меня нет установки Postgres, чтобы проверить это, поэтому рассмотрите это скорее как псевдокод, чем рабочий пример ... Это работает в MySQL, хотя)

SELECT 
    SUM(p.`score`) AS 'total_score'
FROM part2vendor AS p2v
INNER JOIN (
    SELECT pn, cost * qty AS `score`
    FROM wo_parts
) AS p
    ON p.pn = p2v.pn
WHERE p2n.workorder=$workorder"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...