mysql - MySQL 视图将 INT 列的 SUM 转换为十进制类型
问题描述
我有一个这样的 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
请注意,我对表格和表格都有一个 Django 模型inventory_sales
,但没有视图本身。
此查询的结果如下所示:
((1001, Decimal('1')), (1002, Decimal('4')), ...)
的qty
column 和upc
columninventory_sales
都是 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`
为我修好了。
推荐阅读
- elasticsearch - Elasticsearch - 防止日期直方图地板
- mysql - 如何生成具有动态列的视图(需要通过引用表的行来创建列)
- django - 如何在 django 前端获取文本编辑器
- .net-core - 如何使用 Dotnet 核心从 keycloak 获取所有用户列表
- security - 如果我总是发送相同的消息,HTTPS 是否安全?
- apache-camel - Camel + Spring 的持久订阅有问题
- android - 从资产文件夹中读取文件是最佳做法吗?
- quartz-scheduler - 一段时间后,Quartz 实例关闭
- javascript - 无法删除反应元素onclick
- mysql - Mysql - 将访问者表加入到包含更多匹配行的访问者事件表中,然后对它们进行分组。如何?