Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Podwójne grupowanie?
qweluke
post 1.03.2012, 13:12:31
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 25.03.2010
Skąd: Radom

Ostrzeżenie: (10%)
X----


mam taką tabelę:

godzina, data, kierowca, wypadków

w kolumnie godzina są godziny w takiej formie 01:15, 14:45, 17:26 itd..

chcę jednym zapytaniem wyciągnąć dane w tai sposób aby z kolumny wypadków dostać dwie nowe tabele z podziałem na godziny nocne i dzienne

czyli coś takiego

  1. SELECT date, SUM(wypadkow) AS 'w nocy' FROM pojazdy WHERE DATE='2012-01-01' AND DATE='2012-01-31' AND godzina>='00:00:00' AND godzina<='11:59:59' GRUUP BY date


To wyświetli dni miesiąca z datą oraz z kolumną 'w nocy'.
Teraz do tego muszę dodać kolumnę 'w dzień'.
Jak to zrobić?

Ten post edytował qweluke 1.03.2012, 13:14:31
Go to the top of the page
+Quote Post
thek
post 1.03.2012, 13:54:36
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




UNION? smile.gif


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
qweluke
post 1.03.2012, 15:09:11
Post #3





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 25.03.2010
Skąd: Radom

Ostrzeżenie: (10%)
X----


próbowałem ale nie działa :/
Łączy wyniki w jedno (albo ranna albo wieczorna) w zależności od kolejności zapytania


  1. (SELECT date, SUM(wypadkow) AS 'w nocy' FROM pojazdy WHERE DATE='2012-01-01' AND DATE='2012-01-31' AND godzina>='00:00:00' AND godzina<='11:59:59' GRUUP BY date)
  2. UNION
  3. (SELECT date, SUM(wypadkow) AS 'w dzien' FROM pojazdy WHERE DATE='2012-01-01' AND DATE='2012-01-31' AND godzina>='12:00:00' AND godzina<='23:59:59' GRUUP BY date)


Chyba ze coś źle robie?
Go to the top of the page
+Quote Post
nospor
post 1.03.2012, 15:12:47
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




łączy rekordy z takimi samymi wartosciami. Doczytaj w manualu jak zrobic by nie łączył, niezależnie od wyników. Bodajże UNION ALL ale nie pamiętam dokładnie - sprawdź sam


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
qweluke
post 1.03.2012, 15:25:44
Post #5





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 25.03.2010
Skąd: Radom

Ostrzeżenie: (10%)
X----


ale przecież powinien stworzyć kolejną kolumnę a tego nie robi.
Tak jak piszesz, UNION ALL nie łączy rekordów z takimi samymi wartościami, natomiast mimo wszystko powinien stworzyć 3 kolumny a tworzy cały czas dwie :/
Go to the top of the page
+Quote Post
nospor
post 1.03.2012, 15:27:53
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




3 kolumny? Nie, nie panie kolego. Przeczytaj w manualu co robi union. On łączy rekordy a nie kolumny.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
qweluke
post 1.03.2012, 15:31:22
Post #7





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 25.03.2010
Skąd: Radom

Ostrzeżenie: (10%)
X----


no o tym właśnie pisze.
potrzebuję podzielić to na 3 kolumny (dzień, noc, data). Nie potrzebuję łączyć danych, UNION zasugerowała inna osoba...

Jeszcze raz:

Mam kolumny:
Data
2012-01-01
2012-01-15
...

Wypadki
1
3
5
2
...

Godzina
15:15:00
17:13:00
...


Chce zrobić tak, aby wyświetlić w jednym zapytaniu ile wypadków w jakim dniu było w nocy i w dzień

czyli:

DATA | DZIEŃ | NOC
01/01| 4 | 3
03/05| 5 | 7

I do tego celu chce wykorzystac tabele "godziny" aby pogrupować wyniki na noc i na dzień.
Go to the top of the page
+Quote Post
luckyps
post 1.03.2012, 18:41:26
Post #8





Grupa: Zarejestrowani
Postów: 153
Pomógł: 41
Dołączył: 28.06.2011
Skąd: Częstochowa

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


Moze to Ci pomoze:

  1. SELECT a.DATA, sum(a.noc), sum(a.dzien) FROM (
  2. SELECT DATA,GODZINA case when GODZINA BETWEEN <warunek na noc> sum(wypadki) else 0 end AS noc
  3. , case when GODZINA BETWEEN <warunek na dzien> sum(wypadki) else 0 end AS dzien
  4. FROM TABELA GROUP BY DATA, GODZINA
  5. )a
  6. GROUP BY a.DATA;
Go to the top of the page
+Quote Post
qweluke
post 1.03.2012, 22:09:32
Post #9





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 25.03.2010
Skąd: Radom

Ostrzeżenie: (10%)
X----


  1. 1064 - You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near 'case when godzina between ('00:00:00' AND '14:59:59') sum(wypadki) else 0 end' at line 4


coś nie działa :/
Go to the top of the page
+Quote Post
luckyps
post 2.03.2012, 14:42:39
Post #10





Grupa: Zarejestrowani
Postów: 153
Pomógł: 41
Dołączył: 28.06.2011
Skąd: Częstochowa

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


moze tak...

  1. ... case when TIME(godzina) BETWEEN (TIME('00:00:00') AND TIME('14:59:59')) sum(wypadki) else 0 end ....
Go to the top of the page
+Quote Post
qweluke
post 5.03.2012, 23:45:49
Post #11





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 25.03.2010
Skąd: Radom

Ostrzeżenie: (10%)
X----


ok, poradzilem sobie smile.gif

dzieki panowie

  1. SELECT date,
  2. SUM(CASE WHEN DATE<='11:59:59' THEN wypadkow ELSE 0 END) AS rano,
  3. SUM(CASE WHEN DATE>='12:00:00' THEN wypadkow ELSE 0 END) AS popoludniu
  4. FROM cms_interval_skills
  5. WHERE split =87
  6. AND godzina>= '2011-10-01'
  7. AND godzina<= '2011-10-31'
  8. GROUP BY date


Ten post edytował qweluke 6.03.2012, 10:35:00
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 12.06.2025 - 15:41