【问题标题】:Pandas `read_sql` SUM column differs from CLI outputPandas `read_sql` SUM 列与 CLI 输出不同
【发布时间】: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


【解决方案1】:

蒂姆的评论告诉我正确的方向 - 问题不在于任何方法。我有 'WHERE orders.open = %s' 并提供了错误的查询参数(1 而不是 0)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2014-08-16
    • 1970-01-01
    相关资源
    最近更新 更多