मैं खातों के डेटाबेस से पूछताछ करने की कोशिश कर रहा हूं, जिनमें से प्रत्येक में एकाधिक प्रविष्टियां हैं, और प्रत्येक खाते से कुल, औसत, न्यूनतम, अधिकतम और गिनती खींचें। नीचे दिया गया कोड एक खाते के लिए एक उदाहरण है। समस्या यह है कि मुझे कई प्रविष्टियाँ मिलती हैं जहाँ न्यूनतम मान अधिकतम से अधिक होता है। मैंने इनमें से कुछ खातों की स्पॉट-चेक की है और ऐसा लगता है कि औसत की गणना सही ढंग से की जा रही है, इसलिए मुझे नहीं लगता कि यह डेटाटाइप का मुद्दा है। क्या यह 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    |
0
bstew85 25 मई 2018, 16:13

1 उत्तर

सबसे बढ़िया उत्तर

कृपया जांचें कि Consumption क्या डेटाटाइप है। आप शायद सही मान रहे हैं कि यह एक प्रकार का मुद्दा है और Consumption एक स्ट्रिंग है जहां '11.00000' <'9.0000' है, क्योंकि '1' < '9'।

AVG काम कर रहा होगा, क्योंकि स्ट्रिंग्स पर कोई औसत नहीं है, इसलिए SQLite चुपचाप संख्याओं में परिवर्तित हो जाता है।

संभव समाधान:

  • अच्छा: कॉलम का डेटाटाइप बदलें।
  • कम अच्छा: min(cast(consumtion as decimal)), max(cast(consumtion as decimal))
1
Thorsten Kettner 25 मई 2018, 16:29