Skocz do zawartości

Problem z użyciem COUNT(*)


T800

Rekomendowane odpowiedzi

Witam, mam następujący problem. Przykładowa tabela:

id	imię	            nazwisko	wartość zamówienia
1	Jan	            Kowalski  	            120
2	Franciszek	    Nowak	            300
3	Michał	            Nowak	            200
4	Jan	            Kowalski	            150

Teraz interesuje mnie ilu unikatowych klientów składało swoje zamówienia.

Niestety przy użyciu

SELECT `imie`,`nazwisko`,COUNT(*)
FROM `zamowienia`
GROUP BY `imie`,`nazwisko`

otrzymuję wynik

COUNT(*)
2
1
1

Zapytanie zlicza mi elementy każdej grupy. Jak zmodyfikować zapytanie, aby wynikiem była łączna liczba unikatowych elementów wszystkich grup czyli '3'?

Odnośnik do komentarza
Udostępnij na innych stronach

Cała ta tabela jest źle zaprojektowana, nie nie ma sensu przechowywał dane klientów w tym wypadku imie i nazwisko razem z zamówieniami. Prawidłowo powinny być minimum dwie tabele jedna Klienci druga Zamówienia w której kluczem obcym było by id_klienta itd..

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

W tej chwili mam taką tabelę (id_przedmiotu, id_oceny, atrybut1, atrybut2, atrybut3, ocena)

Przykładowy wiersz (23, 12, czerwony, w paski, gładki, 7)

Użytkownicy wskazują 3 cechy danego produktu, a następnie ocenę tego produktu z tymi cechami. Potem jest już grupowanie po cechach i wyliczanie oceny. Czy w takim przypadku również należy to rozbić na dwie tabele?

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

T800 poproś kogoś o krótki kurs normalizacji bazy danych i jak to powinno mniej więcej wygladać, bo to co robisz w niedługim czasie powróci do Ciebie z tysiącem problemów nie do rozwiązania i będzie trzeba zaczynać projekt od nowa.

Nie za bardzo tez rozumiem czemu chesz mieć wynik 3 skoro zapytanie policzyło ci OK,

chciałeś wiedzieć ile zamówień miała kazda osoba

no chyba ze chodzi ci o

select Liczba fom

(

SELECT `imie`,`nazwisko`,COUNT(*) as Liczba

FROM `zamowienia`

GROUP BY `imie`,`nazwisko`)

Odnośnik do komentarza
Udostępnij na innych stronach

Użytkownicy wskazują 3 cechy danego produktu, a następnie ocenę tego produktu z tymi cechami. Potem jest już grupowanie po cechach i wyliczanie oceny.
Ale o co tu chodzi ;) Ty kierujesz się jakąś logiką w projektowaniu tych tabel czy zasadą, "a może zadziała", a jak nie to spróbuje inaczej... bo na to niestety mi wygląda.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Pewnie chodzi o SELECT COUNT(DISTINCT CONCAT(imie,nazwisko)) FROM zamowienie

T800 poproś kogoś o krótki kurs normalizacji bazy danych

Przesadna normalizacja też jest niekiedy przereklamowana ;) Na przykład wyliczanie COUNT(*) w grupach jest dość wolne i lepiej trzymać dodatkowe pole chociaż dane w bazie się mogą przez to "rozjechać"...

Chociaż tabela fakt źle zaprojektowana. Przynajmniej ta pierwsza. Może coś gotowego weź lepiej (przeprojektowanie bazy to raczej napisanie całego projektu od 0 widząc przykład tej 1-ej tabeli :shout: )

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki za wskazówkę Sławek, teraz chodzi:)

Co do struktury bazy, tabela z zamówieniami była przykładowa i miała tylko pokazać jaki jest problem. Sama baza wygląda tak:

tabela produkty

(id_produktu, opis)

tabela uzytkownicy

(id_uzytkownika, ...pozostałe dane userów....)

tabela oceny

id_produktu, id_uzytkownika, cecha1, cecha2, cecha3, ocena)

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności