我正在尝试查询帐户数据库,每个帐户都有多个条目,并从每个帐户中提取总计,平均值,最小值,最大值和计数。以下代码是一个帐户的示例。问题是我得到许多条目,其中最小值大于最大值。我已经对其中一些帐户进行了现场检查,看起来平均值正在计算中,所以我不认为它是数据类型的问题。它可能是领先的' 1'在11中读取小于9?如果是这样,我该如何解决这个问题?
SELECT `Account` ,
--`CustomerName` ,
`METER_SIZE` ,
SUM(`Consumption`) AS `Total_Cons` ,
AVG(`Consumption`) AS `Avg_Cons` ,
MIN(`Consumption`) AS `Min_Cons` ,
MAX(`Consumption`) AS `Max_Cons` ,
COUNT(`Consumption`) AS `Bills`
FROM `Billing_Meterreads_2015_2017`
WHERE `CustomerClass` LIKE 'Residential'
AND `Account` LIKE '000000280' ;
返回
|Account | METER_SIZE | Total_Cons | Avg_Cons | Min_Cons | Max_Cons | Bills |
|000000280 | 3/4 | 597.0 | 7.6538 |11.00000 | 9.00000 | 78 |
答案 0 :(得分:1)
请检查Consumption
的数据类型。你可能是正确的假设它是一个类型问题而Consumption
是一个字符串,其中'11 .00000'< '9.0000',因为'1'< '9'。
AVG
可能正常工作,因为字符串上没有平均值,因此SQLite会静默转换为数字。
可能的解决方案:
min(cast(consumtion as decimal))
,max(cast(consumtion as decimal))