Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zapytanie z warunkami i grupowaniem
jerzy12
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 8.01.2016

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


czy ktos moglby pomoc w stworzeniu zapytania
http://sqlfiddle.com/#!2/e380d/1

baza
  1. CREATE TABLE IF NOT EXISTS `test` (
  2. `id` int(10) UNSIGNED NOT NULL,
  3. `dzien` text COLLATE utf8_unicode_ci NOT NULL,
  4. `numer` int(11) NOT NULL,
  5. `wartosc` int(11) NOT NULL
  6. ) ENGINE=InnoDB;
  7.  
  8. INSERT INTO `test` (`id`, `dzien`, `numer`, `wartosc`) VALUES
  9. (1, 'poniedzialek', 0,5),
  10. (2, 'wtorek', 0,50),
  11. (3, 'wtorek', 1,4),
  12. (4, 'wtorek', 1,5),
  13. (4, 'wtorek', 2,5);


moje zapytanie
  1. SELECT `dzien`,
  2.  
  3. IF(`numer`=0,sum(`wartosc`),0) AS '0',
  4. IF(`numer`=1,sum(`wartosc`),0) AS '1',
  5. IF(`numer`=2,sum(`wartosc`),0) AS '2'
  6.  
  7. FROM `test`
  8. GROUP BY `dzien`


wynik powinien byc nastepujacy
dzien | 0 | 1 | 2
poniedzialek | 5 | 0 | 0
wtorek |50 | 9 | 5

problem w tym ze moje zapytanie zwraca co innego

Ten post edytował jerzy12 9.01.2016, 00:50:07
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 809
Pomógł: 1828
Dołączył: 11.03.2014

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


https://en.wikibooks.org/wiki/MySQL/Pivot_table
Go to the top of the page
+Quote Post
jerzy12
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 8.01.2016

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


link przydatny bo rozwiazal ten problem o ktorym pisalem wyzej

chcialbym natomiast pojsc jeszcze krok dalej i zrobic cos podobnego ale bardziej dynamicznie

przykladowa baza i rozwizanie pod linkiem
http://sqlfiddle.com/#!9/c6564/1

baza sql
  1. CREATE TABLE IF NOT EXISTS `test` (
  2. `id` int(10) UNSIGNED NOT NULL,
  3. `dzien` date,
  4. `imie` text COLLATE utf8_unicode_ci NOT NULL,
  5. `wartosc` int(11) NOT NULL
  6. ) ENGINE=InnoDB;
  7.  
  8. INSERT INTO `test` (`id`, `dzien`, `imie`, `wartosc`) VALUES
  9. (1, '2015-12-01', 'ewa',5),
  10. (2, '2015-12-02', 'monika',50),
  11. (3, '2015-12-02', 'ewa',4),
  12. (4, '2015-12-05', 'ewa',5);
  13.  
  14.  


zapytanie
  1. SELECT `imie`,DATE_FORMAT(`dzien`,'%Y-%m-%d') AS pierwsza_data,
  2. sum(IF(`dzien`='2015-12-01',`wartosc`,0)) AS '0',
  3. sum(IF(`dzien`='2015-12-02',`wartosc`,0)) AS '1',
  4. sum(IF(`dzien`='2015-12-03',`wartosc`,0)) AS '2',
  5. sum(IF(`dzien`='2015-12-04',`wartosc`,0)) AS '3',
  6. sum(IF(`dzien`='2015-12-05',`wartosc`,0)) AS '4'
  7.  
  8. FROM `test`
  9. GROUP BY `imie`


problem jest taki ze to nie do konca mi liczy jak powinno
chodzi o to ze wartosc w kolumnie "0" dla moniki powinna wynosic 50
a teraz ta wartosc jest w jedynce

problem jest w tym ze nazwa kolumny as 0, as 1 itd powinna byc tworzona dynamicznie

cos w ten sposob, tylko ze to nie dziala
  1. SELECT `imie`,DATE_FORMAT(`dzien`,'%Y-%m-%d') AS pierwsza_data,
  2. sum(IF(`dzien`='2015-12-01',`wartosc`,0)) AS ilosc_dni(`dzien` - pierwsza_data),
  3. sum(IF(`dzien`='2015-12-02',`wartosc`,0)) AS ilosc_dni(`dzien` - pierwsza_data),
  4. sum(IF(`dzien`='2015-12-03',`wartosc`,0)) AS ilosc_dni(`dzien` - pierwsza_data),
  5. sum(IF(`dzien`='2015-12-04',`wartosc`,0)) AS ilosc_dni(`dzien` - pierwsza_data),
  6. sum(IF(`dzien`='2015-12-05',`wartosc`,0)) AS ilosc_dni(`dzien` - pierwsza_data)
  7.  
  8. FROM `test`
  9. GROUP BY `imie`

czy jest jakas opcja zeby cos takiego zrobic?

Ten post edytował jerzy12 16.01.2016, 01:52:40
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: 25.12.2025 - 20:21