首页 > 解决方案 > PostgreSQL 从 SUM CLAUSE 返回错误的值

问题描述

您好,我有 3 个表,其中一个存储我正在获取 ID 并将其用作 FKEY 的客户

第二个表存储我的 store_products,我使用它的 ID 作为 FKEY,它有一个名为 price 的表

然后第三个表我加入这两个表,它看起来像这样:

SELECT * FROM order_list;
 customers_cid | store_products_spid | quantity |     order_date      | price_sum
---------------+---------------------+----------+---------------------+-------
             3 |                   6 |        3 | 2021-09-03 20:22:33 |
             3 |                   5 |        1 | 2021-09-03 20:22:33 |
             3 |                   4 |        2 | 2021-09-03 20:22:33 |
             3 |                   6 |        3 | 2021-09-03 20:38:50 |
             3 |                   5 |        1 | 2021-09-03 20:38:50 |
             3 |                   4 |        2 | 2021-09-03 20:38:50 |
(6 rows)

例如,我希望第一行 price_sum 为 4.5,基本上 store_products 表对应的 id 为 1.5$

SELECT * FROM store_products
 spid | dealer_product_dpid | product_name  | type | description| price | quantity
------+---------------------+---------------+------+-----------------------------+-------+----------
    3 |                  16 | Baked Beans 2 | Food | Many beans |  5.97 |      203
    4 |                  16 | Baked Beans 2 | Food | Many beans |  5.97 |      203
    5 |                   5 | Baked Beans 2 | Food | Many beans |  21.9 |      333
    6 |                   3 | Baked Beans 2 | Food | Many beans |   1.5 |      333
(4 rows)

所以第一列关闭 order_list sum_price

SELECT * FROM order_list;
 customers_cid | store_products_spid | quantity |     order_date      | price_sum
---------------+---------------------+----------+---------------------+-------
             3 |                   6 |        3 | 2021-09-03 20:22:33 |

所以 order_list 中的第一列 sum_price 显然应该是 4.5,因为对应的 store_products_spid 和 store_products 表 spid 是 6,它的价格是 1.5,order_list 表中的数量是 3,所以 3 * 1.5 = 4.5

但是我在获取此查询时遇到问题,这就是我尝试这样做的方式,显然由于某种原因这是错误的

SELECT SUM(sp.price * ol.quantity) FROM store_products AS sp, order_list AS ol
WHERE ol.order_date = '2021-09-03 20:22:33' AND ol.store_products_spid = 6 AND ol.customers_cid = 3;

result: 106.02

由于我无法理解结果应该是 4.5,并且就我而言,我已将每个标志条件放在我的 WHERE 子句中以限制该表。

那么我怎样才能让它查询正确的值呢?

这是客户表以防它有帮助。

SELECT * FROM customers
 cid | first_name | last_name |      address      | zip_code | country |       email
-----+------------+-----------+-------------------+----------+---------+-------------------
   1 | Mohamed    | Mo        | 10 Downing Street | SW1A 2AA | UK      | mooo@example.com
   2 | John       | Doe       | Buckingham Palace | SW1A 1AA | England | email@example.com
   3 | Jane       | Earl      | 100 Street Road   | SW2A 3AA | GB      | fake@example.com
(3 rows)

标签: postgresql

解决方案


在您的查询中,store_products 和 order_list 之间没有连接条件。

Postgresql 将您的查询读取为“将 store_products 的每个价格相加乘以来自行 order_list 的数量,其中 order_list.order_date = '2021-09-03 20:22:33' AND order_list.store_products_spid = 6 AND order_list.customers_cid = 3

再添加一个条件 store_products.spid = order_list.store_products_spid


推荐阅读