Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Wykorzystanie sum() kilka razy
SmokAnalog
post
Post #1





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Cześć,

załóżmy, że mam takie zapytanie:

Kod
SELECT sum(`a`),
       sum(`b`),
       sum(`a`) - sum(`b`) AS `balance`
FROM `tabela`


Czy MySQL zapamięta sobie poszczególne sumy dla obliczenia `balance` czy będzie je liczyło od nowa? Jeśli od nowa, to jak to najprościej zoptymalizować? Próbowałem zmiennymi:

Kod
SELECT @sum_a := sum(`a`),
       @sum_b := sum(`b`),
       @sum_a - @sum_b AS `balance`
FROM `tabela`


Ale to jakieś bzdury zwraca w `balance` (IMG:style_emoticons/default/smile.gif) A poza tym nie jestem pewien czy to potrzebne. Wiecie jak działa MySQL w tym względzie?

Ten post edytował SmokAnalog 30.08.2014, 21:54:22
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


1. Chcąc się upewnić że dane będą liczone na pewno tylko raz należałoby skorzystać z podzapytania.
2. EXPLAIN na zapytaniu nie zwraca takich detali, ale porównując oba zapytania zarówno w MySQL-u jak i Postgresie wygląda na to, że nie ma pomiędzy nimi różnicy. W obu przypadkach złożoność obliczeniowa to O(n).
3. Jeżeli to zapytanie samo w sobie nie sprawia problemów zostaw je jak jest - przedwczesna optymalizacja najczęściej przynosi więcej szkód niż pożytku.
  1. SELECT SUM(a) AS a, SUM(b) AS b, SUM(a) - SUM(b) AS balane FROM tabela;
  2. SELECT *, a - b AS balance FROM (SELECT SUM(a) AS a, SUM(b) AS b FROM tabela) tmp;
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #3





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Nie ma jakichś oficjalnych oświadczeń na ten temat? Dziwnie tak robić coś "żeby mieć pewność", MySQL raczej działa według określonego algorytmu.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 22:32