Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

गैर-सन्निहित मानों की गणना करना

आपकी पहली क्वेरी आप इसे इस तरह बेहतर तरीके से लिख सकते हैं:

SELECT  guid, current_level , if(@id <> guid, @lev := 10, 0) AS useless, case when @id <> guid then @id := guid else 0 end AS useless2
         , (case when (current_level = 200 AND current_level <> @lev) then 1 else 0 end) as TIMES
        , if(current_level = 200 AND current_level <> @lev, @lev := current_level, 0) AS useless3

 FROM sensor_logs
 , (SELECT @id := 'none', @lev := 10) var_init_subquery
 ORDER BY guid

न केवल आवश्यकता होने पर स्पष्ट रूप से ऑर्डर करना अधिक साफ है, सबक्वेरी में नहीं, इसे सबक्वायरी में करने से खराब निष्पादन योजना भी हो सकती है (जिसका अर्थ है अस्थायी तालिका के मामले में खराब प्रदर्शन)।

अपने अंतिम परिणाम के लिए, आपको सीधे GROUP BY वगैरह लागू नहीं करना चाहिए। चयन (और इसलिए आपके चर और गणना) का मूल्यांकन बाद . किया जाता है ग्रुप बाय। अपनी गणना के बाद समूहीकरण करने के लिए, अपनी क्वेरी को एक सबक्वेरी में रखें:

SELECT guid, SUM(times) FROM (
    SELECT  guid, current_level , if(@id <> guid, @lev := 10, 0) AS useless, case when @id <> guid then @id := guid else 0 end AS useless2
             , (case when (current_level = 200 AND current_level <> @lev) then 1 else 0 end) as TIMES
            , if(current_level = 200 AND current_level <> @lev, @lev := current_level, 0) AS useless3

     FROM sensor_logs
     , (SELECT @id := 'none', @lev := 10) var_init_subquery
     ORDER BY guid
) sq
GROUP BY guid



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - CONCAT - क्या एक स्ट्रिंग को सम्मिलित करने और इसे एक चर के रूप में उपयोग करने का कोई तरीका है?

  2. PHP के माध्यम से JSON को MySQL डेटा

  3. MySQL में वैकल्पिक तर्कों के साथ एक फ़ंक्शन बनाएँ

  4. एकल उद्धरण से बचने के लिए pdo तैयार करें

  5. PHP MYSQL CSV आयात करें और फिर अनावश्यक प्रविष्टियों की तुलना करें और निकालें