Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: COUNT różnych pól na jedenej tabeli
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
DJ ProG
Witam.

Problem wydaje się prozaiczny, ale w praktyce pokazuje swoje prawdziwe oblicze.
Mianowicie weźmy, że mam taką oto tabelę:
Kod
| browser | os      |
+---------+---------+
| Firefox | Windows |
| Firefox | Linux   |
| Safari  | MacOS   |
| IE      | Windows |
| Firefox | MacOS   |
| Opera   | Linux   |
| IE      | Windows |
| Firefox | Windows |
| Firefox | Linux   |
| Opera   | MacOS   |

Jako, że danych mam sporo, podzapytaniem pobieram te potrzebne - powiedzmy, że do powyższej postaci.
Problem? Jak w jednym zapytaniu pobrać ilość tych samych komórek?
Chcę, by zapytanie zwróciło coś na kształt Firefox - 5, IE - 2, Opera - 2, Safari - 1, Linux - 3, MacOS - 3, Windows - 4.

I w tym cały problem. Bo, jak wiadomo, definiując np. GROUP BY browser, os dostaniemy całkowicie inny rezultat...
a nie mam pojęcia, czy można robić dwa osobne SELECTy i GROUP BY na jednej tabeli... w gwoli wyjaśnienia - upieram się przy tej jednej tabeli, ponieważ - jak już nadmieniłem - dane pobieram podzapytaniem, a że jest ich naprawdę dużo (po filtracji zwracane jest od paruset do paru k rekordów) nie mogę sobie pozwolić na ponowne wykonanie podzapytania...

Tak więc jeśli ktoś ma jakiekolwiek pomysły, uwagi, sposoby na wykorzystanie tej jednej tabeli (jakieś jej skopiowanie, może nadawanie podwójnych aliasów?) czy osobne GROUPy będę wdzięczny... winksmiley.jpg
sowiq
Ja bym próbował tak:
  1. ( SELECT COUNT(*), browser, 'browser' AS typ FROM tabelka GROUP BY browser )
  2. UNION
  3. ( SELECT COUNT(*), os, 'os' AS typ FROM tabelka GROUP BY os )
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.