![]() |
![]() ![]() |
![]() |
![]()
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).
Czy sobie darować i sumę wykonać już w PHP. Ten post edytował markonix 8.01.2012, 17:47:28 -------------------- |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
-------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Mała literówka ale nieważne.
Mówiłem o sumie dwóch sum, gdzie te dwie sumy to są różne kolumny. -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Można użyć np. sumy tabel/zbiorów UNION:
W sumie to nie wiem, czy można jakoś inaczej. Choć może jakieś zapytanie z instrukcją warunkową (IF) zdałoby egzamin. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Można też zrobić JOIN'a:
-------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Można też zrobić JOIN'a:
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ń:
Ten post edytował mortus 8.01.2012, 19:33:13 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Przyznam, że wszystkich kombinacji nie sprawdzałem, ale na bazie testowej (z danymi niepasującymi do zsumowania) zadziałało poprawnie.
Najlepiej jak autor wątku sam sprawdzi wszystkie rozwiązania, porówna ich poprawność, szybkość (fajnie jakby pokazał wyniki porównawcze dla rzeczywistych danych) i wybierze te, które będzie mu najbardziej odpowiadało. -------------------- |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Przyznam, że wszystkich kombinacji nie sprawdzałem, ale na bazie testowej (z danymi niepasującymi do zsumowania) zadziałało poprawnie. Najlepiej jak autor wątku sam sprawdzi wszystkie rozwiązania, porówna ich poprawność, szybkość (fajnie jakby pokazał wyniki porównawcze dla rzeczywistych danych) i wybierze te, które będzie mu najbardziej odpowiadało. Nie wierzę w to. Zresztą widać "gołym okiem", że zapytanie sumuje wartości z kolumny column1 dla l = 2 i l = 3, czyli nie doda wartości np. dla l = 1. Podobnie jest z kolumną column2 gdzie zostaną zsumowane wartości dla l = 2 i l = 3. Przecież warunek po OR nie oddziela Ci w żaden sposób jednej tabeli (reprezentowanej przez alias) od drugiej (reprezentowanej przez alias), a złączenie tylko podwaja liczbę kolumn, nadając im odpowiednie nazwy. Też testowałem zapytania. |
|
|
![]()
Post
#9
|
|
![]() 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). Można jeszcze użyć podzapytań:
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 ![]() Ten post edytował markonix 8.01.2012, 20:30:38 -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.07.2025 - 08:49 |