sql'de GROUP BY ve ORDER BY arasındaki fark nedir


119

Genel olarak hangisini ne zaman kullanıyorsunuz? Örnekler şiddetle tavsiye edilir!

MySql'den bahsediyorum, ancak konseptin başka bir DBMS'de farklı olduğunu hayal edemiyorum

Yanıtlar:


79

ORDER BY, ürünlerin iade edilme sırasını değiştirir.

GROUP BY, gruplanmamış sütunlarda (SUM, COUNT, AVG vb. Gibi) toplama işlevlerini gerçekleştirmenize olanak tanıyan belirtilen sütunlara göre kayıtları toplar.


130
Bu ifade, eşlik eden bir örnek olmadan neredeyse hiçbir anlam ifade etmiyor.
JohnMerlino

2
bence bağlantıdaki sayfadaki ikinci örnek farkı anlamak için tutorialspoint.com/sql/sql-group-by.htm
nishantbhardwaj2002

Lütfen bir örnek verebilir misiniz?
Rice

249

ORDER BY, ürünlerin iade edilme sırasını değiştirir.

GROUP BY, gruplanmamış sütunlarda (SUM, COUNT, AVG vb. Gibi) toplama işlevlerini gerçekleştirmenize olanak tanıyan belirtilen sütunlara göre kayıtları toplar.

TABLE:
ID NAME
1  Peter
2  John
3  Greg
4  Peter

SELECT *
FROM TABLE
ORDER BY NAME

= 
3 Greg
2 John
1 Peter
4 Peter

SELECT Count(ID), NAME
FROM TABLE
GROUP BY NAME

= 
1 Greg
1 John 
2 Peter

SELECT NAME
FROM TABLE
GROUP BY NAME
HAVING Count(ID) > 1

=
Peter

2
Tabloda ageEngin farklı yaşlara sahip sütun varsa ve sorgu İSİME GÖRE TABLO GRUBUNDAN YAŞ SEÇİNSE?
Varun

1
Grubunuzda olmayan veya bir yöntemi olan sütunları döndüremezsiniz. Bu nedenle, gruba göre yaş eklemeniz veya Max (Yaş) gibi bir şey yapmanız gerekir.
RiddlerDev

78

ORDER BY: Verileri artan veya azalan düzende sıralayın.

MÜŞTERİLER tablosunu düşünün :

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Aşağıda, sonucu artan sırada NAME göre sıralayacak bir örnek verilmiştir:

SQL> SELECT * FROM CUSTOMERS
     ORDER BY NAME;

Bu, aşağıdaki sonucu verecektir:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

GROUP BY: aynı verileri gruplar halinde düzenleyin.

Şimdi, CUSTOMERS tablosunda yinelenen adlara sahip aşağıdaki kayıtlar bulunur:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Ramesh   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | kaushik  |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

aynı isimleri tek isim altında gruplamak istiyorsanız, GROUP BY sorgusu aşağıdaki gibi olacaktır:

SQL> SELECT * FROM CUSTOMERS
     GROUP BY NAME;

Bu, aşağıdaki sonucu üretir: (aynı adlar için sonuncuyu seçer ve son olarak sütunu artan sırada sıralar)

    +----+----------+-----+-----------+----------+   
    | ID | NAME     | AGE | ADDRESS   | SALARY   |
    +----+----------+-----+-----------+----------+
    |  5 | Hardik   |  27 | Bhopal    |  8500.00 |
    |  4 | kaushik  |  25 | Mumbai    |  6500.00 |
    |  6 | Komal    |  22 | MP        |  4500.00 |
    |  7 | Muffy    |  24 | Indore    | 10000.00 |
    |  2 | Ramesh   |  25 | Delhi     |  1500.00 |
    +----+----------+-----+-----------+----------+

sum, avg vb. gibi SQL işlevleri olmadan hiçbir işe yaramayacağı sonucuna varmışsınızdır.

GROUP BY'ın doğru kullanımını anlamak için bu tanımı gözden geçirin:

GROUP BY yan tümcesi, aynı satırları tek / farklı bir grup halinde özetleyerek bir sorgu tarafından döndürülen satırlar üzerinde çalışır ve SEÇ listesinde COUNT (), SUM gibi uygun Aggregate işlevini kullanarak her grup için özetle tek bir satır döndürür. (), MIN (), MAX (), AVG () vb.

Şimdi, her bir müşterinin (isim) toplam maaş tutarını bilmek istiyorsanız, GROUP BY sorgusu aşağıdaki gibi olacaktır:

SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
     GROUP BY NAME;

Bu, aşağıdaki sonucu üretecektir: (aynı isimlerin maaşlarının toplamı ve aynı isimleri kaldırdıktan sonra İSİM sütununu sıralayın)

+---------+-------------+
| NAME    | SUM(SALARY) |
+---------+-------------+
| Hardik  |     8500.00 |
| kaushik |     8500.00 |
| Komal   |     4500.00 |
| Muffy   |    10000.00 |
| Ramesh  |     3500.00 |
+---------+-------------+

25

Aradaki fark tam olarak adın ima ettiği şeydir: bir grup, bir gruplama işlemi gerçekleştirir ve sıralamaya göre bir sıra.

Bunu yaparsanız SELECT * FROM Customers ORDER BY Name, müşterilerin adına göre sıralanmış sonuç listesini alırsınız.

Eğer yaparsanız SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActive, aktif ve pasif müşteri sayısı elde edersiniz. Grup, belirttiğiniz alana göre sonuçları topladı.


3
Ayrıca: GRUP kullanıyorsanız, sonuçların sıralanması gerekmez; çoğu durumda sezgisel bir sırayla ortaya çıksalar da, bu GROUP maddesi ile garanti edilmez. Gruplarınızın sıralanmasını istiyorsanız, GROUP BY'dan sonra her zaman bir açıklık ORDER BY kullanın.
Dave Costa

16

Tamamen farklı anlamlara sahipler ve gerçekten hiçbir ilgileri yok.

TARAFINDAN SİPARİŞ , sonuç kümesini farklı kriterlere göre sıralamanıza olanak tanır, örneğin ilk önce az'dan ada göre sıralayın, ardından fiyata göre en yüksekten en düşüğe doğru sıralayın.

(Ada göre sipariş, fiyat DESC)

GROUP BY , sonuç kümenizi almanıza, mantıksal gruplara ayırmanıza ve ardından bu gruplar üzerinde toplu sorgular çalıştırmanıza olanak tanır. Örneğin, tüm çalışanları seçebilir, onları işyeri konumlarına göre gruplayabilir ve her işyeri konumundaki tüm çalışanların ortalama maaşını hesaplayabilirsiniz.


8

Basittir, ORDER BYverileri ve GROUP BYgrupları sıralar veya verileri birleştirir.

ORDER BY sonuç kümesini belirtilen alana göre, varsayılan olarak artan sırada sıralar.

Bir sorguyu tetiklediğinizi varsayalım ORDER BY (student_roll_number), bu size sonucu öğrencinin rulo sayılarının artan sırasına göre gösterecektir. Burada student_roll_numbergiriş birden fazla olabilir.

Bu GROUP BYdurumda, bunu toplama fonksiyonlarıyla kullanırız ve verileri toplama fonksiyonuna göre gruplandırır ve sonucu alırız. Burada, SUM (marks)sorgumuzla birlikte GROUP BY (student_first_name)varsa, her gruba ait öğrencilerin puanlarının toplamını gösterecektir (burada bir grubun tüm üyeleri aynı ada sahip olacaktır).


4

GROUP BY, genellikle satırları toplarken (örneğin bazı alanlar için aynı değerlere sahip bir dizi satır için toplamları, ortalamaları, vb. Hesaplarken) bir seçimdeki satırları gruplamak için kullanılır.

ORDER BY, bir select ifadesinden elde edilen satırları sıralamak için kullanılır.



1

ORDER BYartan veya azalan sırada bir alanı gösterir. İken GROUP BYgösterileri aynı FIELDNAMES, id en vb sadece bir çıktıda.


4
Bu cevap, kabul edilen cevabın veya verilen başka bir cevabın halihazırda belirtmediği ek bilgi sağlamaz.
newfurniturey

1
  1. GROUP BY, kayıtları, gruplanmamış sütunlarda (SUM, COUNT, AVG, vb.) Toplama işlevleri gerçekleştirmenize olanak tanıyan belirtilen sütuna göre toplar. ORDER BY, ürünlerin iade edilme sırasını değiştirir.
  2. SELECT IsActive'i seçerseniz, COUNT (*) MÜŞTERİLER GRUBU IsActive'den aktif ve etkin olmayan müşterilerin sayısını alırsınız. Grup, belirttiğiniz alana göre sonuçları topladı. Müşteriden Ada Göre SEÇİN * SEÇİMİ yaparsanız, sonuç listesini müşterinin adına göre sıralanmış olarak alırsınız.
  3. GROUP seçerseniz, sonuçların sıralanması gerekmez; çoğu durumda sezgisel bir sırayla ortaya çıksalar da, bu GROUP maddesi ile garanti edilmez. Gruplarınızın sıralanmasını istiyorsanız, GROUP BY'dan sonra her zaman açıkça ORDER BY kullanın.
  4. Gruplanmış veriler, WHERE yan tümcesi ile filtrelenemez. Sipariş verileri, WHERE cümlesine göre filtrelenebilir.

0

Her GROUP BYzaman gerekli olmadığına dikkat edilmelidir (en azından PostgreSQL'de ve muhtemelen diğer SQL varyantlarında) ORDER BYbir liste ile kullanabilirsiniz ve yine de ASCveya sütun DESC başına kullanabilirsiniz ...

SELECT name_first, name_last, dob 
FROM those_guys 
ORDER BY name_last ASC, name_first ASC, dob DESC;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.