• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SQL funkcje grupujące

Object Storage Arubacloud
+1 głos
95 wizyt
pytanie zadane 14 lutego 2023 w SQL, bazy danych przez Blds Użytkownik (830 p.)

Jaka jest różnica miedzy tymi dwoma zapisami i czy oba są poprawne? Zależy mi na wyciągnięciu średniej ilości zamówień na klienta.

1)

SELECT customer_id, order, AVG(order)
FROM customer AS c
INNER JOIN order AS o ON c.customer_id = o.customer_id
GROUP BY customer_id, order

2)

SELECT customer_id, order, (SELECT AVG(order) FROM order) as średnia
FROM customer AS c
INNER JOIN order AS o ON c.customer_id = o.customer_id

 

1 odpowiedź

+1 głos
odpowiedź 14 lutego 2023 przez Wiciorny Ekspert (270,110 p.)
GROUP BY to polecenie w języku SQL, które służy do grupowania wyników zapytania według jednego lub kilku kryteriów. Po wykonaniu GROUP BY, wyniki zapytania są pogrupowane w odpowiedniej kolejności, zgodnie z podanymi kryteriami, a następnie wyświetlane.

Działanie GROUP BY polega na podziale wyników zapytania na grupy na podstawie wartości określonych kolumn. Na przykład, jeśli masz tabelę transakcji i chcesz wyświetlić sumę sprzedaży dla każdego pracownika w danym okresie, możesz zastosować GROUP BY na kolumnie pracownika, aby podzielić wyniki zapytania na grupy na podstawie pracowników.

Więc... generalizując:

Oba zapytania mają za zadanie obliczenie średniej ilości zamówień na klienta, tylko wykorzystują nieco inne podejścia i zwracają różne wyniki. Pierwsze zapytanie jest bardziej precyzyjne i wydajne, oblicza średnią ilość zamówień dla każdego klienta osobno, a następnie grupuje wyniki po identyfikatorze klienta i zamówieniu.
W taki sposób to zapisując u w każdym wierszu wynikowym będziesz miał informację o identyfikatorze klienta, zamówieniu oraz średniej ilości zamówień na tego klienta.

Drugi zapis korzysta z podzapytania w celu obliczenia jednej średniej dla całej tabeli order i przypisuje ją do każdego wiersza wynikowego, w którym znajdują się informacje o identyfikatorze klienta i zamówieniu. W tym przypadku, każdy wiersz wynikowy będzie miał tę samą wartość średniej, niezależnie od identyfikatora klienta czy zamówienia.

Dlatego odp jest taka, że , jeśli chcesz uzyskać średnią ilość zamówień na każdego klienta, powinieneś wybrać pierwsze zapytanie.
W przeciwnym wypadku - jeśli jednak potrzebujesz jednej średniej dla całej tabeli order, to drugie zapytanie będzie bardziej odpowiednie.

Podobne pytania

0 głosów
0 odpowiedzi 242 wizyt
0 głosów
1 odpowiedź 359 wizyt
pytanie zadane 24 kwietnia 2020 w SQL, bazy danych przez Grzegorzko Obywatel (1,110 p.)
0 głosów
1 odpowiedź 233 wizyt
pytanie zadane 12 czerwca 2017 w PHP przez dervil Gaduła (3,030 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...