bugfix> sqlite > 投稿

アカウントのデータベースにクエリを実行しようとしています。各データベースには複数のエントリがあり、各アカウントから合計、平均、最小、最大、およびカウントを取得しています。以下のコードは、1つのアカウントの例です。問題は、最小値が最大値よりも大きいエントリを多数取得することです。これらのアカウントの一部をスポットチェックしましたが、平均が正しく計算されているように見えるため、データ型の問題ではないと思います。 11の先頭の「1」が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 件
  • Consumption のデータ型を確認してください  です。あなたはおそらくそれがタイプの問題であり、 Consumption であることを前提としています  「1」<「9」であるため、「11.00000」<「9.0000」の文字列です。

    AVG  文字列に平均がないため、SQLiteはサイレントに数値に変換されるため、機能している可能性があります。

    可能な解決策:

    良い:列のデータ型を変更します。

    あまり良くない: min(cast(consumtion as decimal))max(cast(consumtion as decimal))

あなたの答え