Zliczanie rekordów występujących kilka razy pod rząd

Zliczanie rekordów występujących kilka razy pod rząd
D9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

Dopiero uczę się SQL i mam pewien problem. Chciałbym żeby zliczyło mi wartości wpisane kilka razy pod rząd i wyświetliło je w nowej tabeli. Program ma pomijać wartości występujące tylko raz z rzędu Przykład:

nazwa
a
a
a
b
c
c
a
a
a
b
b
d

Powinno wyjść coś takiego:

nazwa | ilosc
a | 3
c | 2
a | 3
b | 2

BlackBad
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 454
0

no common a goolge ?

Kopiuj
SELECT nazwa, count(nazwa) Ilosc
FROM Tabela
GROUP BY nazwa
oracledev
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 56
1

@dzikq90: Na pewno chcesz zliczać wg. kolejności?
Wg. jakiego klucza występuje ta kolejność?

D9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

@BlackBad: Takie zapytanie zlicza mi wszystkie wartości a, b, c i d i pokazuje w tabeli:

nazwa | ilosc
a | 6
b | 3
c | 2
d | 1

A chcę, żeby zliczało tylko wartości wpisane pod rząd i pokazało wynik:

nazwa | ilosc
a | 3
c | 2
a | 3
b | 2

BlackBad
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 454
1

No ale jak pisze @oracledev - masz w tej tablicy jeszcze jakieś kolumny ? Co determinuje kolejność ? Bez tego ani rusz.

D9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

@BlackBad: Są 2 kolumny - nazwa użytkownika oraz data (czas, w którym użytkownik wypożyczył książkę). Użytkownik podczas wypożyczania książki jest wpisywany do bazy. Data/czas wypożyczenia determinuje kolejność

UŻYTKOWNIK || DATA/CZAS
a || YYYY-MM-DD, hh:mm:ss
a || YYYY-MM-DD, hh:mm:ss
a || YYYY-MM-DD, hh:mm:ss
b || YYYY-MM-DD, hh:mm:ss
c || YYYY-MM-DD, hh:mm:ss
c || YYYY-MM-DD, hh:mm:ss
a || YYYY-MM-DD, hh:mm:ss
a || YYYY-MM-DD, hh:mm:ss
a || YYYY-MM-DD, hh:mm:ss
b || YYYY-MM-DD, hh:mm:ss
b || YYYY-MM-DD, hh:mm:ss
d || YYYY-MM-DD, hh:mm:ss

koszalek-opalek
  • Rejestracja: dni
  • Ostatnio: dni
BlackBad
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 454
2

@koszalek-opalek: dal Ci odpowiedź ... niestety ja spotkania miałem. Ale testowałem u siebie właśnie coś w ten deseń jak podane 2 linku (2 opcja):

Kopiuj
;WITH cte AS (
 SELECT DataW, nazwa, grp = SUM(CASE WHEN nazwa = prev THEN 0 ELSE 1 END) OVER(ORDER BY DataW)
 FROM (SELECT *, prev = LAG(nazwa) OVER(ORDER BY DataW) FROM test) s
)
SELECT nazwa, cnt = COUNT(*)
FROM cte
GROUP BY grp,nazwa
ORDER BY grp;

Przykłąd: http://sqlfiddle.com/#!18/8ad2b8/1

D9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

Super. Wielkie dzieki za szybka pomoc :D

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.