Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zliczanie wystąpień z kilku kolumn jednej tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
jaqba
To pewnie proste zapytanie, ale jakoś nie mogę znaleźć rozwiązania.
Mam tabelę, a w niej pola kraj1, kraj2.
Próbuję stworzyć zapytanie w wyniku którego otrzymam pola nazwa kraju, ilość wystąpień kraj1, ilość wystąpień kraj2.
Nie wiem, czy tu trzeba tworzyć podzapytania, czy można to zrobić jednym.
Rochu
"Próbuję stworzyć zapytanie w wyniku którego otrzymam pola nazwa kraju, ilość wystąpień kraj1, ilość wystąpień kraj2."

a gdzie to pole nazwa kraju się znajduje?

btw. może wstaw strukturę tych tabel?
jaqba
Mam tabelę:

rok | kraj1 | kraj2
2014 | Polska | Czechy
2013 | Rosja | Polska
2012 | Polska | Rosja
2011 | Czechy | Rosja
2010 | Polska | Czechy

W wyniku chciałbym otrzymać:

Kraj |iloscKraj1 |iloscKraj2
Polska | 3 | 1
Rosja | 1 | 2
Czechy| 1 | 2
mmmmmmm
a masz w tabeli jakis PK, albo UI?
jaqba
Nie mam..
kicior
Może nie jest to jedno zapytanie ale skoro nie masz pomysłu jak to zrobić to może tak:

  1. SELECT t1.kraj1 AS kraj , count(t1.kraj1) AS I , ( SELECT count(t2.kraj2)
  2. FROM test2 t2
  3. WHERE t2.kraj2 = t1.kraj1
  4. GROUP BY t2.kraj2 LIMIT 1) AS II
  5. FROM test2 t1
  6. GROUP BY t1.kraj1
  7.  
  8. UNION
  9.  
  10. SELECT t1.kraj2 AS kraj ,( SELECT count(t2.kraj1)
  11. FROM test2 t2
  12. WHERE t2.kraj1 = t1.kraj2
  13. GROUP BY t2.kraj1 LIMIT 1) AS I, count(t1.kraj2) AS II
  14. FROM test2 t1
  15. WHERE t1.kraj2 IN ( SELECT a.kraj2
  16. FROM test2 a
  17. WHERE a.kraj2 NOT IN ( SELECT b.kraj1 FROM test2 b) )
  18. GROUP BY t1.kraj2;



u mnie działa smile.gif
trueblue
  1. SELECT tmp1.kraj1,ilosckraj1,ilosckraj2 FROM (SELECT kraj1,COUNT(kraj1) AS ilosckraj1 FROM kraje
  2. GROUP BY kraj1) AS tmp1,
  3. (SELECT kraj2,COUNT(kraj2) AS ilosckraj2 FROM kraje
  4. GROUP BY kraj2) AS tmp2
  5. WHERE tmp1.kraj1=tmp2.kraj2

mmmmmmm
@trueblue - przy założeniu, że każdy z krajów jest zarówno w `kraj1`, jak i `kraj2`
jaqba
Zgadza się, działa przy założeniu, że kraj występuje w obu polach.
Jeśli wystąpi w jednym, to nie pojawi się w wyniku zapytania, ale to już i tak postęp smile.gif
mmmmmmm
  1. SELECT kraj, sum(kraj=kraj1), sum(kraj=kraj2) FROM table1 t JOIN (SELECT kraj1 kraj FROM table1 UNION SELECT kraj2 FROM table1) sub ON sub.kraj IN (t.kraj1, t.kraj2) GROUP BY kraj
jaqba
Działa! Wprawdzie nie wiem dokładnie jak, ale działa:)
Dzięki
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.