-2

私のクエリは以下のとおりです。

select     vend_id,
           COUNT(*) as num_prods
from       Products
group by   vend_id;

select vend_id, COUNT(vend_id)ではなく、この部分がどのように機能するか教えてくださいselect COUNT(vend_id)

4

4 に答える 4

2
select COUNT(vend_id)

これにより、ベンダー ID が null でない行の数が返されます

select     vend_id, COUNT(*) as num_prods
from       Products
group by   vend_id

これにより、ID ごとに要素がグループ化され、ID ごとにいくつの行があるかが返されます。例:

ID          name       salary      start_date              city       region
----------- ---------- ----------- ----------------------- ---------- ------
          1 Jason            40420 1994-02-01 00:00:00.000 New York   W
          2 Robert           14420 1995-01-02 00:00:00.000 Vancouver  N
          3 Celia            24020 1996-12-03 00:00:00.000 Toronto    W
          4 Linda            40620 1997-11-04 00:00:00.000 New York   N
          5 David            80026 1998-10-05 00:00:00.000 Vancouver  W
          6 James            70060 1999-09-06 00:00:00.000 Toronto    N
          7 Alison           90620 2000-08-07 00:00:00.000 New York   W
          8 Chris            26020 2001-07-08 00:00:00.000 Vancouver  N

このクエリを実行すると、city に対して 1 つの行が取得され、その行に関数 (この場合は count) を適用できます。したがって、都市ごとに行数が取得されます。他の機能も使用できます。

SELECT     City, COUNT(*) as Employees
FROM       Employee
GROUP BY   City

結果は次のとおりです。

City       Employees
---------  ---------
New York           3
Toronto            2
Vancouver          3

各都市の行数を比較できるように

于 2012-06-10T04:09:33.990 に答える
0

COUNT(vend_id)句なしで単純に選択するとGROUP BY、NULL 以外のベンダー ID を持つ行の総数を含む 1 つの行が取得されます。この最後のビットは重要であり、COUNT(*)行の「欠落」を回避するために好まれる理由の 1 つです。COUNT(*)これは効率が悪いと主張する人もいるかもしれませんが、私が使用した DBMS には当てはまりません。いずれにせよ、脳死状態の DBMS を使用している場合COUNT(1)、いつでも を試すことができます。

でグループ化するvend_idと、ベンダー ID ごとに 1 行が取得され、カウントはその ID の行数になります。

ステップバイステップの詳細 (概念的には、最適化によって得られる効率はほぼ確実にありますが) では、最初のクエリは次のとおりです。

SELECT COUNT(vend_id) AS num_prods FROM products
  • のすべての行のリストを取得しますproducts
  • が NULL でない行vend_idをカウントし、そのカウントを含む 1 つの行を 1 つの列に配信しnum_prodsます。

グループ化の場合:

SELECT vend_id, COUNT(vend_id) AS num_prods FROM products GROUP BY vend_id
  • のすべての行のリストを取得しますproducts
  • の各値についてvend_id:
    • vend_idwhereが NULL ではないことに一致する行を数え、最初の列に を含み、2 番目の列にその数をvend_id含む 1 つの行を配信します。vend_idnum_prods

null を含む行vend_idは集計関数に寄与しないことに注意してください (countこの場合)。

最初のクエリでは、これは単純に、それらが全体の合計に表示されないことを意味します。

2 番目のケースでは、出力行はまだ存在しますが、カウントはゼロになることを意味します。COUNT(*)これは、 orを使用するもう 1 つの正当な理由COUNT(1)です。

于 2012-06-10T04:09:20.773 に答える
0

select vend_idvend_idフィールドのみを選択し、select *すべてのフィールドを選択します

于 2012-06-10T04:10:13.370 に答える
0

select vend_id, COUNT(vend_id)select COUNT(vend_id)使用している限り、カウント列に対して同じ結果が得られますgroup by vend_id。使用するときは、使用select vend_id, COUNT(vend_id)してグループ化する必要がありますvend_id

于 2012-06-10T05:06:53.393 に答える