Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Suma dwóch sum
markonix
post
Post #1





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Czy można w jednym zapytaniu dokonać sumowania dwóch sum (każda suma ma inny warunek WHERE).

  1. SELECT SUM( `column1` ) AS `s1`
  2. FROM `table`
  3. WHERE `1` = '2'
  4.  
  5. SELECT SUM( `column2` ) AS `s2`
  6. FROM `table`
  7. WHERE `1` = '3'


Czy sobie darować i sumę wykonać już w PHP.

Ten post edytował markonix 8.01.2012, 17:47:28


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Można też zrobić JOIN'a:
  1. SELECT (SUM(`t1`.`column1`)+SUM(`t2`.`column2`)) AS 'suma_final'
  2. FROM `table` AS `t1`
  3. LEFT JOIN `table` AS `t2` ON `t1`.`id` = `t2`.`id`
  4. WHERE `t1`.`1` = 2
  5. OR `t2`.`1` = 3


--------------------
Go to the top of the page
+Quote Post
mortus
post
Post #3





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Cytat(vokiel @ 8.01.2012, 19:16:29 ) *
Można też zrobić JOIN'a:
  1. SELECT (SUM(`t1`.`column1`)+SUM(`t2`.`column2`)) AS 'suma_final'
  2. FROM `table` AS `t1`
  3. LEFT JOIN `table` AS `t2` ON `t1`.`id` = `t2`.`id`
  4. WHERE `t1`.`1` = 2
  5. OR `t2`.`1` = 3

Też tak na początku myślałem. Jednak nie można, bo to zupełnie inny wynik daje. De facto jest to chyba kwestia grupowania wyników, którego przy zapytaniu z JOIN-em nie da się użyć prawidłowo.

Można jeszcze użyć podzapytań:
  1. SELECT (
  2. (SELECT SUM(`t1`.`column1`) FROM `table` `t1` WHERE `l` = 2)
  3. +
  4. (SELECT SUM(`t2`.`column2`) FROM `table` `t2` WHERE `l` = 3)
  5. ) AS `suma_sum`


Ten post edytował mortus 8.01.2012, 19:33:13
Go to the top of the page
+Quote Post
markonix
post
Post #4





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Pojedynczy SELECT na sumę:
Wykonanie zapytania trwało 0.0045 sekund(y)
(Czyli 2 zapytania około 0.0100 sekundy + dodawanie w PHP).

Cytat(mortus @ 8.01.2012, 19:22:18 ) *
Można jeszcze użyć podzapytań:
  1. SELECT (
  2. (SELECT SUM(`t1`.`column1`) FROM `table` `t1` WHERE `l` = 2)
  3. +
  4. (SELECT SUM(`t2`.`column2`) FROM `table` `t2` WHERE `l` = 3)
  5. ) AS `suma_sum`

Wykonanie zapytania trwało 0.0162 sekund(y))
Tak więc pozapytanie zabiera ponad 300% jednego selecta.

Sposób z UNION:
Wykonanie zapytania trwało 0.0088 sekund(y))
Zabiera tyle samo co oba zapytania, ale pomija PHP no i jest w jednym zapytaniu.
Wybieram smile.gif

Ten post edytował markonix 8.01.2012, 20:30:38


--------------------
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 19.08.2025 - 15:43