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

SQL funkcje grupujące

Cloud VPS
+1 głos
278 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 (281,450 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 430 wizyt
0 głosów
1 odpowiedź 164 wizyt
pytanie zadane 19 lutego w SQL, bazy danych przez Steady Obywatel (1,200 p.)
0 głosów
1 odpowiedź 517 wizyt
pytanie zadane 24 kwietnia 2020 w SQL, bazy danych przez Grzegorzko Obywatel (1,110 p.)

93,460 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,837 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

Kursy INF.02 i INF.03
...