postgresql - 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)
解决方案
在您的查询中,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
推荐阅读
- php - 从用户那里获取与模型的 morphMany 关系
- websocket - 通过 WebSockets 从 Web 应用程序访问 pub/sub 系统
- java - 带有 JSON 的网络服务
- font-face - AMP:使用字体的自定义字体不起作用
- c# - 更新了弹性搜索中的文档 ID
- javascript - jquery选择器选择不属于指定类的所有文本输入
- android - 作业在应用程序启动时运行,不应该
- google-chrome - 如何隐藏或禁用 chrome 上的状态 HOVER 栏
- permutation - 生成排列的并行算法
- javascript - 复选框按数组中的一个索引序列化