繁体   English   中英

MySQL视图将INT列的SUM转换为十进制类型

[英]MySQL view turns SUM of an INT column into a decimal type

我有这样的MySQL视图:

VIEW `qty_sold_view` AS
    SELECT 
        `t2`.`upc` AS `upc`, SUM(`t2`.`qty`) AS `qty_sold`
    FROM
        (`inventory_orders` `t1`
        JOIN `inventory_sales` `t2` ON ((`t2`.`order_id` = `t1`.`id`)))
    WHERE
        (`t1`.`date_placed` > (CURDATE() - INTERVAL 42 DAY))
    GROUP BY `t2`.`upc`

我使用Django原始查询为此视图运行查询:

sql = 'SELECT `upc`, `qty_sold` FROM `qty_sold_view` WHERE `upc` = 1001 OR `upc`= 1002 ...'
with connection.cursor() as con:
    con.execute(sql) 

请注意,我为inventory_orders表和inventory_sales表都有一个Django模型,但视图本身没有。

该查询的结果如下所示:

((1001, Decimal('1')), (1002, Decimal('4')), ...)

inventory_sales _销售的qty列和upc列均为INT类型,因此我不明白为什么将数据作为Decimal返回。

问题是当我尝试json.dumps此查询的结果时,我得到了:

TypeError:Decimal类型的对象不可JSON序列化

我可以使用网上找到的各种答案来解决这个问题,这些答案实际上是对小数点进行json序列化,但是当它们最初不应该是小数点时,这样做似乎很愚蠢。

如何强制MySQL将它们视为INT?

根据这个 ,你总是应该用FORMAT使用时SUM函数。

将视图更改为:

VIEW `qty_sold_view` AS
SELECT 
    `t2`.`upc` AS `upc`, FORMAT(SUM(`t2`.`qty`), 0) AS `qty_sold`
FROM
    (`inventory_orders` `t1`
    JOIN `inventory_sales` `t2` ON ((`t2`.`order_id` = `t1`.`id`)))
WHERE
    (`t1`.`date_placed` > (CURDATE() - INTERVAL 42 DAY))
GROUP BY `t2`.`upc`

为我修复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM