GROUP BY句:パケットができることを理解次の列名がグループ化され、各パケット全体ではなく手術台。
例:製品のテーブルには、検索数、各ベンダーの商品。
mysqlの> SELECT vend_id、COUNT(*)AS num_prods FROM製品のGROUP BY vend_id。
結果:
+ --------- + ----------- +
| vend_id | num_prods |
+ --------- + --------- - +
| 1001 | 3 |
| 1002 | 2 |
| 1003 | 7 |
| 1005 | 2 |
+ ----- + --------- +
4行のセット内の(0.01秒)
分析:
最初のグループは、COUNTは、各集約パケットに対して実行される、vend_id。目的は、レコードが取得されるたびに検索する場合は、GROUP BYで、ここでは例えば、各ベンダーのためだと思います。
GROUP BYは以下を提供します。
図1は、後BY GROUPは、ネストされている複数の列を含むことができます。
2は、BY GROUPがネストされている場合、データは最後のパケットにまとめておきます。
3、SELECT式で使用される場合、同じことがGROUP BY句で指定する必要が記載されているGROUP BY句の列の各有効または列検索式(ただし、集計しない機能)でなければなりません表現。エイリアスを使用することはできません。
図4に示すように、外側の収集ステートメントことを除いて、各列のSELECT文では、GROUP BY句で指定されなければなりません。
図5に示すように、NULLパケットとして列のNULL値を持つパケットは、返された場合。NULLパケットとして返される複数のカラムが存在する場合。
6、GROUP BY句は、WHERE句、前ORDER BY句の後に来る必要があります。
パケットフィルタ結果
私たちは、句は結果をフィルタリングするために使用されるWHERE知っているが、パケットフィルタリングのための句ではありませんWHERE。
WHERE句は、ライン用のフィルタであるため。グループの結果をフィルタリングするには、あなたがHAVING句を使用する必要があり、HAVING句は、グループ化の結果をフィルタリングすることができます。
例えば:
ためには、IDとは、二つ以上の注文を顧客の注文を取得します。
分析:
この検索のニーズに、顧客IDに従ってグループ化される必要があるが、その後、フィルタリングされたパケットは、2桁よりも大きいです。
MySQLの> SELECT CUST_ID、COUNT(*)AS注文からの注文のGROUP BY CUST_ID HAVING注文> = 2。
結果:
+ --------- + -------- +
| CUST_ID |注文|
+ --------- + -------- +
| 10001 | 2 |
+ --------- + --------- +
SET(0.00秒)に1行
WHEREとの組み合わせ(WHEREフィルタ処理前)
時には、GROUP BYおよびWHERE句を組み合わせて使用する必要があります。たとえば、次の製品テーブル内の2つ以上の商品を提供するために、検索、および価格は、10社のサプライヤーよりも高くなっています。
分析:
まず、検索サプライヤーは、そのためには、SELECT句SELECT vend_idする必要があります
第二に、製品テーブル、この列には、価格を有するフィルタ価格にWHERE句で使用される10点の条件よりも高いです。prodcuts prod_price> = FROM SELECT vend_id 10。
各商品番号の価格が10以上vend_idように次、vend_id基、WHERE節GROUP BY配置を得ることができます。vend_id BY prod_price> = 10グループのprodcuts FROM vend_id SELECT。
最後に、パケットフィルタリングの結果は、財の2つの以上のパケットをフィルタリング
MySQLの> SELECT vend_id、COUNT(*)AS num_prods FROM製品prod_price > = 10 GROUP BYが vend_id HAVING COUNT(*)> = 2。
結果:
+ --------- + ----------- +
| vend_id | num_prods |
+ --------- + --------- - +
| 1003 | 4 |
| 1005 | 2 |
+ ----- + --------- +
SETに2行(0.00秒)
グループ化の結果のソート
注文スケジュールでは、注文番号を取得し、ライン50の総価格は、注文の合計金額に等しいです。
MySQLの> SELECT列order_num、SUM(数量* ITEM_PRICE)ASたOrderTotal FROMのOrderItemsのGROUP BY列order_num HAVING SUM(数量* ITEM_PRICE)> = 50 ORDER BYたOrderTotal。
結果は次のとおりです。
+ ----------- + ------------ +
|列order_num |たOrderTotal |
+ ----------- + --- + ---------
| 20006 | 55.00 |
| 20008 | 125.00 |
| 20005 | 149.87 |
| 20007 | 1000.00 |
+ ----------- + ------- + -----
セット内の4行(0.08秒)
SELECT句の順序
SELECT
から
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
---------------------
転送します。https:個人的な学習のための//blog.csdn.net/liuchunming033/article/details/47279003、変更があります