SQL GROUP BY Statement

Ang pagsusumala (halimbawa SUM) ay kadalasang kailangang magdagdag ng GROUP BY statement.

GROUP BY statement

Ang GROUP BY statement ay ginagamit upang pinagsama-samang gumamit ng mga pagsusumala, at pagkakasama ng resulta ng result set ayon sa isang o ilang column.

Gramatika ng SQL GROUP BY

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

Halimbawa ng SQL GROUP BY

Mayroon kaming ito "Orders" table:

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

Ngayon, gusto naming hanapin ang kabuuang halaga ng bawat customer (ang kabuuang halaga ng bawat order).

Gusto naming gamitin ang GROUP BY statement para sa pagkakasama ng mga customer.

Ginagamit namin ang sumusunod na SQL statement:

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer

Ang resulta ng collection ay katulad ng:

Customer SUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000

Maganda ba, ba?

Hilingin namin na tingnan kung anong mangyayari kapag pinapawalang-bahala ang GROUP BY:

SELECT Customer,SUM(OrderPrice) FROM Orders

Ang resulta ng collection ay katulad ng:

Customer SUM(OrderPrice)
Bush 5700
Carter 5700
Bush 5700
Bush 5700
Adams 5700
Carter 5700

Ang resulta ng collection na ito ay hindi ang aming kailangan.

Kung bakit hindi maaaring gamitin ang ibang SELECT statement sa itaas? Ipaliwanag namin: Ang ibang SELECT statement sa itaas ay tinukoy ng dalawang column (Customer at SUM(OrderPrice)). "SUM(OrderPrice)" ay nagbibigay ng isang solong halaga (ang kabuuang halaga ng "OrderPrice" column), habang ang "Customer" ay nagbibigay ng anim na halaga (isang halaga para sa bawat linya ng table "Orders"). Kaya hindi namin makakuha ng tamang resulta. Gayunman, nakita ninyo na ang GROUP BY statement ay lumutas sa problema na ito.

GROUP BY mahigit sa isang column

Maaari rin naming gamitin ang GROUP BY statement para sa mahigit sa isang column, tulad ng:

SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
GROUP BY Customer,OrderDate