【のMysql] MySQLデータパケットとGROUP有すること、およびこれらの組み合わせWHEREの使用

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、変更があります

おすすめ

転載: www.cnblogs.com/xuelisheng/p/11363799.html