私のクエリは以下のとおりです。
select vend_id,
COUNT(*) as num_prods
from Products
group by vend_id;
select vend_id, COUNT(vend_id)
ではなく、この部分がどのように機能するか教えてくださいselect COUNT(vend_id)
。
私のクエリは以下のとおりです。
select vend_id,
COUNT(*) as num_prods
from Products
group by vend_id;
select vend_id, COUNT(vend_id)
ではなく、この部分がどのように機能するか教えてくださいselect COUNT(vend_id)
。
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
各都市の行数を比較できるように
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
。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_id
whereが NULL ではないことに一致する行を数え、最初の列に を含み、2 番目の列にその数をvend_id
含む 1 つの行を配信します。vend_id
num_prods
null を含む行vend_id
は集計関数に寄与しないことに注意してください (count
この場合)。
最初のクエリでは、これは単純に、それらが全体の合計に表示されないことを意味します。
2 番目のケースでは、出力行はまだ存在しますが、カウントはゼロになることを意味します。COUNT(*)
これは、 orを使用するもう 1 つの正当な理由COUNT(1)
です。
select vend_id
vend_id
フィールドのみを選択し、select *
すべてのフィールドを選択します
select vend_id, COUNT(vend_id)
をselect COUNT(vend_id)
使用している限り、カウント列に対して同じ結果が得られますgroup by vend_id
。使用するときは、使用select vend_id, COUNT(vend_id)
してグループ化する必要がありますvend_id