Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL] Zliczanie przed grupowaniem, count i group by
wicy
post 14.11.2009, 13:05:27
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 2.02.2008

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


Mam bazę, która wygląda mniej więcej tak:
[nazwa] [A] [B] [nazwa niepowtarzalna]
nazwa 1 - 10 - 100 - nazwa_niepowtarzalna 1
nazwa 2 - 10 - 101 - nazwa_niepowtarzalna 2
nazwa 3 - 11 - 100 - nazwa_niepowtarzalna 1
nazwa 4 - 12 - 102 - nazwa_niepowtarzalna 3
nazwa 5 - 12 - 102 - nazwa_niepowtarzalna 3
nazwa 6 - 12 - 102 - nazwa_niepowtarzalna 3
nazwa 7 - 12 - 103 - nazwa_niepowtarzalna 4
nazwa 8 - 10 - 100 - nazwa_niepowtarzalna 1

w której grupuję wiersze by otrzymać niepowtarzalne nazwy w tabeli na stronie.
Obok tych nazw chciałbym dwie liczby - ilość wystąpień [nazwa] i ilość wystąpień B, czyli np.
Nazwa niepowtarzalna 1 - 2 - 1
Nazwa niepowtarzalna 2 - 1 - 1
Nazwa niepowtarzalna 3 - 3 - 1
Nazwa niepowtarzalna 4 - 1 - 1
Używam:
SELECT tabela.*, count(a) as nazwa, count(b ) as ile_b FROM tabela WHERE a>=10 and b>=100 GROUP BY nazwa_niepowtarzalna.
W tabeli wynikowej dostaję (chyba) poprawne wartości count(b ) natomiast count(a ) jest błędny i jest równy count(b ).

Nazwa niepowtarzalna jest przypisana ściśle do wartości A w tabeli, więc grupowanie po niej powoduje, że mam jeden wiersz z pierwszym wystąpieniem wartości A. Po grupowaniu wygląda to tak:
[nazwa] [A] [B] [nazwa niepowtarzalna]
nazwa 1 - 10 - 100 - nazwa_niepowtarzalna 1
nazwa 2 - 10 - 101 - nazwa_niepowtarzalna 2
nazwa 4 - 12 - 102 - nazwa_niepowtarzalna 3
nazwa 7 - 12 - 103 - nazwa_niepowtarzalna 4

Jak zliczyć wiersze przed ich zgrupowaniem?

Ten post edytował wicy 14.11.2009, 13:13:40
Go to the top of the page
+Quote Post
kefirek
post 14.11.2009, 13:47:09
Post #2





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


Chyba tak bedzie dobrze.

  1. SELECT *,
  2. (SELECT COUNT(a) FROM tabela n2 WHERE (n2.nazwa niepowtarzalna=n1.nazwa niepowtarzalna) AND a>=10) AS ile_a,
  3. (SELECT COUNT(b) FROM tabela n3 WHERE (n3.nazwa niepowtarzalna=n1.nazwa niepowtarzalna) AND b>=100) AS ile_b,
  4. COUNT(nazwa niepowtarzalna) AS ile_nazw
  5. FROM tabela n1 GROUP BY nazwa


Ten post edytował kefirek 14.11.2009, 13:51:41
Go to the top of the page
+Quote Post
wicy
post 14.11.2009, 21:30:42
Post #3





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 2.02.2008

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


Dzięki za pomoc. Wystarczyło w count dodać distinct - count(distinct a) winksmiley.jpg
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 6.07.2025 - 10:02