sql >> Databáze >  >> RDS >> Mysql

SQL:Načítání celkového součtu jako dílčího výběru je velmi pomalé

Spíše než seskupování ve všech těchto polích je jednodušší (a rychlejší) řešení (od zde ) může být:

GROUP BY UNIX_TIMESTAMP(timestamp_local)/3600

Nedokážu si představit, že váš dotaz vrátí výsledky, které chcete (pokud správně chápu vaše požadavky). Chápu vaše požadavky tak, že když pro danou hodinu nejsou žádné řádky, chcete vypočítat součet všech řádků s hodinou

V MySQL, o kterém vím, neexistuje žádný snadný účinný způsob, jak to udělat, navrhoval bych vytvořit dočasnou tabulku se všemi možnými hodnotami seskupení v rozsahu, na který se díváte (pravděpodobně pomocí smyčky). Pravděpodobně můžete tuto tabulku nastavit předem na několik let a případně přidat řádky podle potřeby. Pak se můžete jednoduše připojit k tomuto stolu a ke svému stolu.

Pokud byste používali MSSQL, mohli jste použít rekurzivní CTE, i když by to pravděpodobně bylo velmi pomalé. Podívejte se na toto nebo google "mysql cte" pro alternativy MySQL. Způsob, jak toho dosáhnout pomocí rekurze, je opakovaně se (vlevo) připojit ke stejnému stolu po dobu HOUR = HOUR+1 dokud nezískáte hodnotu jinou než NULL, pak zastavte. Pro každý z nich vypočítáte součet zpětně.




  1. Když je to naléhavé

  2. Jak vypustit sloupec v SQL?

  3. Jak hledat hodnotu oddělenou čárkou

  4. Zobrazit pouze podkategorie wordpressu