jaqba
22.02.2015, 00:09:04
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
22.02.2015, 10:03:42
"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
22.02.2015, 22:24:18
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
23.02.2015, 08:55:10
a masz w tabeli jakis PK, albo UI?
jaqba
23.02.2015, 19:46:19
Nie mam..
kicior
24.02.2015, 01:21:31
Może nie jest to jedno zapytanie ale skoro nie masz pomysłu jak to zrobić to może tak:
SELECT t1.kraj1 AS kraj , count(t1.kraj1) AS I , ( SELECT count(t2.kraj2)
FROM test2 t2
WHERE t2.kraj2 = t1.kraj1
GROUP BY t2.kraj2 LIMIT 1) AS II
FROM test2 t1
GROUP BY t1.kraj1
UNION
SELECT t1.kraj2 AS kraj ,( SELECT count(t2.kraj1)
FROM test2 t2
WHERE t2.kraj1 = t1.kraj2
GROUP BY t2.kraj1 LIMIT 1) AS I, count(t1.kraj2) AS II
FROM test2 t1
WHERE t1.kraj2 IN ( SELECT a.kraj2
FROM test2 a
WHERE a.kraj2 NOT IN ( SELECT b.kraj1 FROM test2 b) )
GROUP BY t1.kraj2;
u mnie działa
trueblue
24.02.2015, 08:50:13
SELECT tmp1.kraj1,ilosckraj1,ilosckraj2 FROM (SELECT kraj1,COUNT(kraj1) AS ilosckraj1 FROM kraje
GROUP BY kraj1) AS tmp1,
(SELECT kraj2,COUNT(kraj2) AS ilosckraj2 FROM kraje
GROUP BY kraj2) AS tmp2
WHERE tmp1.kraj1=tmp2.kraj2
mmmmmmm
24.02.2015, 10:35:47
@trueblue - przy założeniu, że każdy z krajów jest zarówno w `kraj1`, jak i `kraj2`
jaqba
24.02.2015, 20:41:47
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
mmmmmmm
24.02.2015, 23:48:15
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
1.03.2015, 11:37:02
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.