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 (и следователно вашите променливи и изчисления) се оценяват след ГРУПАТА ОТ. За да извършите групирането след вашите изчисления, поставете заявката си в подзаявка:

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. Таблицата на базата данни не съществува според компилатора на android studio

  2. Множество връзки към един и същ модел CakePHP

  3. Има ли общо решение за изразяване на извлечен списък с колони в Oracle (и MySQL)?

  4. Как да нулирам поредните номера, за да станат последователни?

  5. Ubuntu - 12.04 - MySql няма да стартира с помощта на услугата mysql start