Πώς μπορώ να χρησιμοποιήσω T-SQL Ομαδοποίηση κατά

ψήφοι
28

Ξέρω ότι πρέπει να έχουν (αν και δεν ξέρω γιατί) μια GROUP BYρήτρα για το τέλος ένα ερώτημα SQL που χρησιμοποιεί οποιεσδήποτε συναρτήσεις συγκεντρωτικών αποτελεσμάτων, όπως count, sum, avg, κλπ:

SELECT count(userID), userName
FROM users
GROUP BY userName

Όταν οι άλλοι θα GROUP BYείναι χρήσιμο, και ποιες είναι οι συνέπειες απόδοσης;

Δημοσιεύθηκε 05/08/2008 στις 19:55
πηγή χρήστη
Σε άλλες γλώσσες...                            


5 απαντήσεις

ψήφοι
30

Για να ανακτήσετε τον αριθμό των widgets από κάθε κατηγορία widget που έχει πάνω από 5 widgets, θα μπορούσατε να το κάνετε αυτό:

SELECT WidgetCategory, count(*)
FROM Widgets
GROUP BY WidgetCategory
HAVING count(*) > 5

Η «έχει» ρήτρα είναι κάτι που οι άνθρωποι συχνά ξεχνούν, επιλέγοντας αντ 'αυτού να ανακτήσει όλα τα δεδομένα τους στον πελάτη και την επανάληψη μέσα από εκεί.

Απαντήθηκε 05/08/2008 στις 20:32
πηγή χρήστη

ψήφοι
13

GROUP BY είναι παρόμοια σε διαφορετικές στο γεγονός ότι περιλαμβάνει πολλαπλά αρχεία σε ένα.

Αυτό το παράδειγμα, δανεισμένη από http://www.devguru.com/technologies/t-sql/7080.asp , παραθέτει διαφορετικά προϊόντα στον πίνακα προϊόντα.

SELECT Product FROM Products GROUP BY Product

Product
-------------
Desktop
Laptop
Mouse
Network Card
Hard Drive
Software
Book
Accessory

Το πλεονέκτημα του GROUP BY πάνω DISTINCT, είναι ότι μπορεί να σας δώσει λεπτομερή έλεγχο, όταν χρησιμοποιείται με ρήτρα ΕΧΟΝΤΑΣ.

SELECT Product, count(Product) as ProdCnt
FROM Products
GROUP BY Product
HAVING count(Product) > 2

Product      ProdCnt
--------------------
Desktop          10
Laptop            5
Mouse             3
Network Card      9
Software          6
Απαντήθηκε 19/08/2008 στις 15:02
πηγή χρήστη

ψήφοι
3

Ομάδα Με δυνάμεων ολόκληρο το σύνολο που πρέπει να συμπληρωθεί πριν επιστρέψει εγγραφές (δεδομένου ότι είναι μια σιωπηρή είδος).

Για το λόγο αυτό (και πολλοί άλλοι), δεν χρησιμοποιούν ποτέ μια ομάδα από το ένα δευτερεύον ερώτημα.

Απαντήθηκε 05/08/2008 στις 20:01
πηγή χρήστη

ψήφοι
2

Μετρώντας τον αριθμό των φορών που οι ετικέτες που χρησιμοποιούνται μπορεί να είναι ένα παράδειγμα google:

SELECT TagName, Count(*)
AS TimesUsed
FROM Tags
GROUP BY TagName ORDER TimesUsed

Αν θέλετε απλά μια ξεχωριστή αξία των ετικετών, θα προτιμούσα να χρησιμοποιήσετε την DISTINCTδήλωση.

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
Απαντήθηκε 05/08/2008 στις 19:58
πηγή χρήστη

ψήφοι
0

GROUP BY βοηθά επίσης όταν θέλετε να δημιουργήσετε μια αναφορά που θα μέσο όρο ή συνοψίσω μια δέσμη των δεδομένων. Μπορείτε GROUP από το Τμήμα ID και το άθροισμα του συνόλου των εσόδων πωλήσεων ή AVG ο αριθμός των πωλήσεων για κάθε μήνα.

Απαντήθηκε 05/08/2008 στις 20:00
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more