Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Podwójne grupowanie?
Forum PHP.pl > Forum > Przedszkole
qweluke
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ć?
thek
UNION? smile.gif
qweluke
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?
nospor
łą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
qweluke
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 :/
nospor
3 kolumny? Nie, nie panie kolego. Przeczytaj w manualu co robi union. On łączy rekordy a nie kolumny.
qweluke
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ń.
luckyps
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;
qweluke
  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 :/
luckyps
moze tak...

  1. ... case when TIME(godzina) BETWEEN (TIME('00:00:00') AND TIME('14:59:59')) sum(wypadki) else 0 end ....
qweluke
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.