【发布时间】:2021-09-17 22:29:51
【问题描述】:
我有一个非常典型的来自表订单的一对多关系-> order_details 和主键order_uuid。我想以某种方式汇总它以便在 Python 中进行分析。
当我从 CLI 对我的 Postgres 数据库执行以下 SQL 查询时,我收到了预期的结果:
查询:
SELECT orders.order_uuid, orders.checkout_datetime,
SUM(order_details.price * order_details.count) as total
FROM orders
INNER JOIN order_details
ON orders.order_uuid = order_details.order_uuid
WHERE orders.open = 0
GROUP BY orders.order_uuid
ORDER BY orders.checkout_datetime DESC;
结果:
order_uuid | checkout_datetime | total
--------------------------------------+----------------------------+--------------------
7b40e9eb-2187-463e-92db-b8c531f71b88 | 2021-07-05 17:44:32.414564 | 2.2
4b418345-9354-4a3c-a2a4-82a735f94f16 | 2021-07-05 16:39:52.192342 | 0.6
0da08b1d-7133-4a23-9d88-9cf0fd776ab1 | 2021-07-05 16:36:24.099433 | 9.5
44ee0e22-e584-46b9-b272-b62c69098de1 | 2021-07-05 15:41:22.142069 | 0.8
52438467-0b2b-4731-a8a4-ec35c752cc4f | 2021-07-05 15:05:02.411967 | 0.3
etc etc.
当我在pandas.io.sql read_sql 方法中执行完全相同的语句时,我的total 列变为None!
python 3.7
df = pandas.io.sql.read_sql(<ABOVE QUERY>, con=my_con)
df.to_string()
输出:
order_uuid checkout_datetime total
0 b703ab2d-4b09-4ff1-a48c-ccfa411f0150 2021-07-05 17:49:31.722608 None
1 bf2b66ed-d310-4be8-899e-c7788d5fce31 2021-07-05 17:44:50.593600 None
2 4417b7f0-81cb-4afe-adf7-2bf8f36e62e6 2021-07-05 16:36:23.627361 None
3 63a9eb68-5656-4551-9bc5-dd5b8c91f48e 2021-07-05 15:47:09.557005 None
4 7013a84d-f6f1-4877-9963-0db6b4117577 2021-07-04 16:18:23.556719 None
如果有帮助,我的连接是到远程 heroku(AWS 托管)数据库的 psycopg2 数据库连接。
【问题讨论】:
-
您确定两个查询的基础数据相同吗?
-
嗨,蒂姆,这是同一张表,我只是碰巧复制了不同的行
标签: python sql pandas postgresql psycopg2