Добавьте все строки, умноженные на другую строку в другой таблице - PullRequest
0 голосов
/ 07 декабря 2009

Я надеюсь, что смогу объяснить это достаточно хорошо. У меня есть 3 таблицы. wo_parts, workorders и part2vendor. Я пытаюсь получить себестоимость всех запчастей, проданных за месяц. У меня есть этот сценарий.

$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";

Что я пытаюсь сделать, так это то, что каждая часть находится в wo_parts (под partnumber [pn]). Стоимость этого предмета указана в part2vendor (под номером детали [pn]). Мне нужно, чтобы цена каждой детали в part2vendor была умножена на количество, проданное в wo_parts. Все 3 связывания - это workorders.ident = wo_parts.workorder и part2vendor.pn = wo_parts.pn. Я надеюсь, что кто-то может помочь. Приведенный выше скрипт не дает мне столько же, сколько при добавлении с помощью калькулятора.

Ответы [ 2 ]

1 голос
/ 01 октября 2012

Основной причиной, по которой я мог бы увидеть что-то подобное, была бы проблема типа. Например, это может произойти, если вы используете FLOAT вместо NUMERIC, вы можете получить немного другой ответ. Между прочим, это слишком распространенная ошибка.

Я бы рекомендовал дважды проверить вашу схему, чтобы убедиться, что вы используете NUMERIC по всем направлениям здесь. NUMERIC невероятно мощен в PostgreSQL, работает очень хорошо и правильно поддерживает операции произвольной точности. Если вы не можете изменить тип данных, приведите ваши поля к числовым в вашем запросе.

Типы FLOAT (включая DOUBLE) - это двоичные числа с фиксированной точностью, и они не всегда точно соответствуют числам с базовыми 10. ЦИФРЫ хранятся внутри как базовая 1000 (что означает 9 цифр на 30 бит), и это очень эффективно для преобразования в / из двоичного файла. Точность также произвольна, хотя она имеет максимум. Однако для финансовых ресурсов максимальные значения или точность не являются проблемой для числовых типов данных. Вы должны использовать их свободно.

1 голос
/ 18 декабря 2009

Это не ответ, просто комментарий.

Почему бы вам не использовать операцию суммирования / умножения вне оператора SQL? Я знаю, что это кажется глупым, потому что это увеличит количество строк кода и сложность скрипта, но, имхо, всегда полезно держать код и операторы SQL как можно дальше.

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