PostgreSQL - GRUPLAMA
PostgreSQL GROUP BYyan tümcesi, aynı verilere sahip bir tablodaki satırları bir arada gruplamak için SELECT deyimiyle birlikte kullanılır. Bu, bu gruplar için geçerli olan çıktı ve / veya hesap toplamalarındaki fazlalığı ortadan kaldırmak için yapılır.
GROUP BY yan tümcesi, bir SELECT deyimindeki WHERE yan tümcesini izler ve ORDER BY yan tümcesinden önce gelir.
Sözdizimi
GROUP BY cümlesinin temel sözdizimi aşağıda verilmiştir. GROUP BY yan tümcesi, WHERE yan tümcesindeki koşulları takip etmeli ve kullanılıyorsa ORDER BY yan tümcesinden önce gelmelidir.
SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN
GROUP BY yan tümcesinde birden fazla sütun kullanabilirsiniz. Gruplamak için kullandığınız sütunun, sütun listesinde mevcut olduğundan emin olun.
Misal
Aşağıdaki gibi kayıtlara sahip ŞİRKET tablosunu düşünün -
# select * from COMPANY;
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
(7 rows)
Her bir müşterinin toplam maaş tutarını bilmek istiyorsanız, GROUP BY sorgusu aşağıdaki gibi olacaktır -
testdb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;
Bu, aşağıdaki sonucu verecektir -
name | sum
-------+-------
Teddy | 20000
Paul | 20000
Mark | 65000
David | 85000
Allen | 15000
Kim | 45000
James | 10000
(7 rows)
Şimdi, aşağıdaki INSERT ifadelerini kullanarak COMPANY tablosunda üç kayıt daha oluşturalım -
INSERT INTO COMPANY VALUES (8, 'Paul', 24, 'Houston', 20000.00);
INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00);
INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00);
Şimdi, tablomuzda yinelenen adlara sahip aşağıdaki kayıtlar var -
id | name | age | address | salary
----+-------+-----+--------------+--------
1 | Paul | 32 | California | 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall | 45000
7 | James | 24 | Houston | 10000
8 | Paul | 24 | Houston | 20000
9 | James | 44 | Norway | 5000
10 | James | 45 | Texas | 5000
(10 rows)
Yine aynı ifadeyi NAME sütununu kullanarak tüm kayıtları gruplayarak aşağıdaki gibi kullanalım -
testdb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;
Bu, aşağıdaki sonucu verecektir -
name | sum
-------+-------
Allen | 15000
David | 85000
James | 20000
Kim | 45000
Mark | 65000
Paul | 40000
Teddy | 20000
(7 rows)
ORDER BY cümlesini GROUP BY cümlesiyle birlikte aşağıdaki gibi kullanalım -
testdb=# SELECT NAME, SUM(SALARY)
FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;
Bu, aşağıdaki sonucu verecektir -
name | sum
-------+-------
Teddy | 20000
Paul | 40000
Mark | 65000
Kim | 45000
James | 20000
David | 85000
Allen | 15000
(7 rows)