SQLite返回的最小值大于最大值

时间:2018-05-25 13:13:06

标签: sqlite

我正在尝试查询帐户数据库,每个帐户都有多个条目,并从每个帐户中提取总计,平均值,最小值,最大值和计数。以下代码是一个帐户的示例。问题是我得到许多条目,其中最小值大于最大值。我已经对其中一些帐户进行了现场检查,看起来平均值正在计算中,所以我不认为它是数据类型的问题。它可能是领先的' 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    |

1 个答案:

答案 0 :(得分:1)

请检查Consumption的数据类型。你可能是正确的假设它是一个类型问题而Consumption是一个字符串,其中'11 .00000'< '9.0000',因为'1'< '9'。

AVG可能正常工作,因为字符串上没有平均值,因此SQLite会静默转换为数字。

可能的解决方案:

  • 好:更改列的数据类型。
  • 不太好:min(cast(consumtion as decimal))max(cast(consumtion as decimal))