我的查询如下:这个计数是如何工作的?
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)
?
当你根本没有GROUP BY
条款选择COUNT(vend_id)
,你会得到一个行与非空厂商ID行的总数 - 最后一点是非常重要的,是一个原因,你可能更喜欢COUNT(*)
以免“缺少”行。有些人可能会争辩说,COUNT(*)
在某种程度上效率较低,但是在我没有使用的DBMS中是这样。在任何情况下,如果你是使用脑死亡的DBMS,你可以尝试COUNT(1)
。
当你按vend_id
,你会得到每个供应商ID一行与统计是行该ID的数量。
在一步一步的细节(概念,但几乎肯定要通过优化来获得效率),第一个查询:
SELECT COUNT(vend_id) AS num_prods FROM products
products
所有行的列表。vend_id
不是NULL的行,然后在单num_prods
柱传送包含该计数一行。对于分组之一:
SELECT vend_id, COUNT(vend_id) AS num_prods FROM products GROUP BY vend_id
products
所有行的列表。vend_id
每个值:
vend_id
vend_id
其中不为空,则传送包含在第一列中的vend_id
并且在第二num_prods
列计数一行的行。注意以空vend_id
那些行不参与聚合函数(count
在这种情况下)。
在第一个查询,简单地意味着它们不会出现在总总。
在第二种情况下,它意味着输出行仍然存在,但是计数将是零。这是使用COUNT(*)
或COUNT(1)
的另一个很好的理由。
select COUNT(vend_id)
这将返回的行数,其中供应商ID不为空
select vend_id, COUNT(*) as num_prods
from Products
group by vend_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
如果您运行此查询,你会得到一个排的城市,你可以将一个函数(在这种情况下,计数)到该行。所以,对于每个城市,你会得到行数。您也可以使用其他功能。
SELECT City, COUNT(*) as Employees
FROM Employee
GROUP BY City
结果是:
City Employees
--------- ---------
New York 3
Toronto 2
Vancouver 3
,你可以比较行数为每个城市
“......将返回行数”_其中供应商ID不为空!_ – paxdiablo
编辑!谢谢。 –