Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zliczanie wystąpień z kilku kolumn jednej tabeli
jaqba
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 21.02.2015

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Rochu
post
Post #2





Grupa: Zarejestrowani
Postów: 64
Pomógł: 14
Dołączył: 25.09.2010

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


"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?
Go to the top of the page
+Quote Post
jaqba
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 21.02.2015

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


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
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


a masz w tabeli jakis PK, albo UI?
Go to the top of the page
+Quote Post
jaqba
post
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 21.02.2015

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


Nie mam..
Go to the top of the page
+Quote Post
kicior
post
Post #6





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 23.02.2015

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


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
trueblue
post
Post #7





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

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


  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

Go to the top of the page
+Quote Post
mmmmmmm
post
Post #8





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


@trueblue - przy założeniu, że każdy z krajów jest zarówno w `kraj1`, jak i `kraj2`
Go to the top of the page
+Quote Post
jaqba
post
Post #9





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 21.02.2015

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


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #10





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


  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
Go to the top of the page
+Quote Post
jaqba
post
Post #11





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 21.02.2015

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


Działa! Wprawdzie nie wiem dokładnie jak, ale działa:)
Dzięki
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: 1.10.2025 - 21:52