gpt4 book ai didi

php - MySQL SUM 不返回正确的值,它会删除小数位。如何防止这种情况?

转载 作者:行者123 更新时间:2023-11-29 01:13:13 24 4
gpt4 key购买 nike

这对我来说很奇怪,我生平第一次见到。我不知道这是正确的行为还是出了什么问题。希望有高人能赐教。

这是我的简单 SQL Fiddle:http://sqlfiddle.com/#!8/ba125/4

我想做的很简单。我想为能源集团总结所有的钱。所以有一个名为 group 的表列。毫不奇怪,它包含公司所属的组的名称。其中,有一个叫做“能量”的组。还有一栏,叫做“钱”。它包含每家公司每年赚取的金额(利润)。我需要总结属于“能源”集团的公司的所有利润(金钱)。听起来很简单,但我有一个问题。在 money 表中,money 以“1.234.567”这种格式存储为 varchar,这意味着该公司的利润为 100 万 234,000...我对使用这种格式感到内疚,我正在研究很久以前制作的系统我开始研究它。但是我的问题在哪里?好吧,如果你看一下 fiddle ,我正在执行一个简单的查询,即能源组的选择资金:

从 finance where group = "energy"中选择 money

它很好地显示了每家公司赚了多少钱。但是如果我执行这个查询:

select sum(money) 作为总计 from finance where group = "energy"

我得到了 99.317 的奇怪结果,我希望得到 18.103.571。这到底是怎么回事?我有希望得到正确的结果吗?谢谢

最佳答案

不要将数字存储为 varchar(n)。不要将数字作为字符串插入。

如果您的数字永远是整数,请使用integer。对于金钱,您应该通常使用decimal。使用适合您的货币的小数位数。对我来说,那是 2。

CREATE TABLE IF NOT EXISTS `finance` (
`id` mediumint(10) NOT NULL AUTO_INCREMENT,
`group` varchar(10) NOT NULL,
`money` decimal(14,2) NOT NULL,
primary key (`id`)
);

INSERT INTO `finance` (`group`, `money`) VALUES
('energy', 3543),
('other', 19881),
('other', 13536),
('other', 20),
('energy', 3607942),
('energy', 66768),
('energy', 10985),
('other', 2150),
('energy', 14414333);

select sum(money)
from finance
where `group` = 'energy'; -- 18103571.00

关于php - MySQL SUM 不返回正确的值,它会删除小数位。如何防止这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28817873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com