Sumowanie unikatowych wierszy sql.

Sumowanie unikatowych wierszy sql.
Rocky Balboa
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Witam was serdecznie. Mam dość dziwny problem w sql. Wydaj się to proste, ale jednak nie mogę nic wymyślić. Jest taka sytuacja. Mam tabelę nazwijmy roboczo Samochody. W tej tabeli jest kolumna o nazwie Marka z danymi:
Volkswagen
Mercedes
Volkswagen
Skoda
Skoda
Seat
Jak mam wyświetlić sumę niepowtarzających się rekordów. W tym przypadku będzie to Mercedes oraz Seat. Myślałem o czymś takim:

Kopiuj
SELECT COUNT(Marka) FROM Samochody GROUP BY Marka HAVING COUNT(Marka)<2;

Jest blisko, ponieważ po wpisaniu wyświetlą się dwie jedynki pod sobą, czyli dwa pojedyncze rekordy jakimi są Mercedes oraz Seat. Teraz nasuwa sie pytanie. Jak dodać te dwie jedynki żeby wyszła oczekiwana suma. Ewentualnie może jest jakiś inny sposób?

MA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
0

Spróbowałbym bez COUNT na początku:
SELECT Marka FROM

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
2

select Count(DISTINCT Marka) FROM samochody

Damian Korczowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 111
0

Nie wiem jaką bazę używasz ale jak dodasz SUM to powinno być ok

Kopiuj
SELECT SUM(COUNT(Marka)) FROM Samochody GROUP BY Marka HAVING COUNT(Marka)<2; BY 
Rocky Balboa
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0
Damian Korczowski napisał(a):

Nie wiem jaką bazę używasz ale jak dodasz SUM to powinno być ok

Kopiuj
SELECT SUM(COUNT(Marka)) FROM Samochody GROUP BY Marka HAVING COUNT(Marka)<2; BY 

No właśnie jak próbuje dodać funkcje SUM tak jak piszesz to wyskakuje mi Invalid use of group function

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

Przy uzyciu CTE ale możesz po p0rostu jako podzapytanie:

Kopiuj
WITH CountSingle
as
(SELECT COUNT(Marka) cnt
FROM Samochody 
GROUP BY Marka 
HAVING COUNT(Marka)<2
)

SELECT count(1) From CountSingle

jako podzapytanie czyli:

Kopiuj
SELECT count(1)
FROM 
(SELECT COUNT(Marka) cnt
FROM Samochody 
GROUP BY Marka 
HAVING COUNT(Marka)<2
) t
Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
0

Wersja alternatywna:

Kopiuj
SELECT Count(*) FROM (SELECT Marka, Count(marka) ilosc FROM Samochody GROUP BY 1) x WHERE ilosc=1
Rocky Balboa
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0
Marcin.Miga napisał(a):

Wersja alternatywna:

Kopiuj
SELECT Count(*) FROM (SELECT Marka, Count(marka) ilosc FROM Samochody GROUP BY 1) x WHERE ilosc=1

W końcu zadziałało!!!! Dzięki wielkie za pomoc. Dziękuję również wszystkim za pomoc

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.