Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL:Извличането на общата сума като подизбор е много бавно

Вместо групиране по всички тези полета, по-просто (и по-бързо) решение (от тук ) може да бъде:

GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600

Не мога да си представя, че вашата заявка връща резултатите, които искате (ако разбирам правилно вашите изисквания). Разбирам вашите изисквания, тъй като, когато няма редове за даден час, искате да изчислите сумата от всички редове с час <този час. MySQL няма да избере празни групи (за частта на подзаявката).

Няма лесен ефективен начин да направите това в MySQL, за който знам, бих предложил да създадете временна таблица с всички възможни стойности на групиране в диапазона, който гледате (вероятно с цикъл). Вероятно можете да настроите тази таблица предварително за няколко години и евентуално да добавите редове, както е необходимо. След това можете просто да се присъедините наляво към тази маса и вашата маса.

Ако сте използвали MSSQL, бихте могли да използвате рекурсивен CTE, въпреки че това вероятно щеше да е много бавно. Погледнете това или google "mysql cte" за MySQL алтернативи. Начинът да направите това с рекурсия е (вляво) да се присъедините към една и съща таблица многократно за HOUR = HOUR+1 докато получите различна от NULL стойност, след което спрете. За всяко от тях ще изчислите сумата обратно.




  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 сървър; Не може да се създаде/запише pid файла

  2. как да получа стойност от заявка за избор в тригер в mysql5?

  3. Завършващото празно пространство в varchar трябва да се разглежда в сравнение

  4. Не може да се зареди драйвер:com.mysql.jdbc.Driver

  5. CAST към DECIMAL в MySQL