SQL计数聚合函数的终极指南
SQL Count函数是一个聚合函数,您可以在查询中使用以返回组中找到的项目数。在本文中,我们将研究如何使用COUNT功能以实现更强大的分析SQL查询。首先,我们将研究函数如何在SQL中工作,然后我们将查看聚合函数是什么。最后,我们将检查一些使用计数以更详细地查看该功能的真实SQL查询。
SQL运算符与功能
在SQL中,有运营商和功能。我们将在这篇文章中查看核心,这是一个函数。因此,在我们进入如何使用计数函数之前,让我们来看看运营商和功能的不同。
通常,运算符在称为操作数,表达式或参数的单个数据上执行或操纵数据。在本文中,我们将使用术语参数。这些运算符在表格或视图中操纵参数并返回结果。在最简单的形式中,运营商包括基本的算术操作,例如添加,减去,分割和乘法。句子地,操作员出现在参数之前或之后,例如在参数之间,例如,1 + 2 + 1。
然而,函数与其参数格式的运算符不同,例如,函数(参数1,参数2,参数3 ......)。这使得总和(1,2,1)等同于示例。它的格式差异使功能能够在零,一个,两个或更多个参数上执行操作,甚至参数集。
什么是SQL聚合函数?
COUNT函数在SQL中是一个聚合函数。SQL中的聚合函数是一种内置技术,它使SQL能够对表或视图中的多行或多组数据执行数学操作。聚合函数与单行函数不同,它不只是关注一行数据,而是处理一组行。
除count之外的所有聚合函数忽略null值。程序员通过使用Group By子句识别表中的目标行或行组,在表中使用Select语句中的聚合。如果省略Group By子句,则聚合函数将适用于表中的所有行和数据。
SQL中的聚合函数是强大的功能,允许程序员写入快速,干净,高效的数据库查询。通过学习如何识别,实施和正确使用聚合函数,程序员手头有一个强大而灵活的数学数学。现在让我们来看看聚合函数的语法,它适用于计数函数。
SQL Count函数语法
聚合函数语法采用将函数放置在参数或参数集之前的形式,也称为表达式。作为示例,计数函数的语法将是:
数(argument1 argument2…)
这是最简单和最常见的形式。
然而,还有其他条款。
以最充分的形式,计数聚合函数的语法是
计数([独特|全部]参数)[Over(Analytic_Clause)]
许多(但不是全部)占用单个参数的聚合函数也接受不同和所有条款。截然不同的条款仅考虑不同或独特的数据出现。使用ALL子句,考虑每个数据项。差异的一个例子是1,1,1和3的不同平均值为2.然而,所有平均值为1.5。在SQL中,一切都是默认模式。
一些聚合函数可以使用分析条款,就像AVG一样。聚合函数也可以嵌套在其他聚合中。我们将在查看下一节中查看一些示例查询时,我们将查看多种方式来使用计数函数。
SQL计数示例查询
了解查询的语法可以帮助我们编写它们,但是看看从数据集中检索的示例查询,我们可以看到将帮助我们弄清楚我们能与他们真正做的事情。
对于本文中的示例查询,我们将使用以下示例表中的数据,称为产品:
ID | Brand_id. | 名称 | 国家 | 价格 |
1 | One hundred. | 冰淇淋 | 美国 | 5. |
2 | 零 | 布鲁塞尔豆芽 | 美国 | 4. |
3. | 零 | 冰山莴苣 | 美国 | 3. |
4. | One hundred. | 冷冻卷饼 | 墨西哥 | 3. |
5. | 101 | 沙拉酱 | 零 | 2 |
6. | 101 | 意大利面酱 | 意大利 | 1 |
7. | 101 | 枫糖浆 | 加拿大 | 3. |
8. | 102 | 剃须膏 | 零 | 1 |
9. | 103 | 干燥器表 | 零 | 2 |
10. | 103 | 垃圾袋 | 零 | 2 |
这是一个简单的产品,适用于杂货店的产品名称,IDS,Brand_ids,价格和原产国。某些值为null在表格中,这意味着它们没有值。这是故意的。我们编写的一些查询将占这些空值。让我们开始使用简单的选择查询。
标准选择查询示例
如果你不熟悉COUNT函数,但懂一点SQL,那么你应该知道这样的查询:
选择名称,来自产品的国家/地区;
这将返回这些结果:
名称 | 国家 |
冰淇淋 | 美国 |
布鲁塞尔豆芽 | 美国 |
冰山莴苣 | 美国 |
冷冻卷饼 | 墨西哥 |
沙拉酱 | 零 |
意大利面酱 | 意大利 |
枫糖浆 | 加拿大 |
剃须膏 | 零 |
干燥器表 | 零 |
垃圾袋 | 零 |
我们可以看到视觉上有十个结果,但我们可以使用SQL Count函数来获得此值,因为我们将在下一个示例中看到。
SQL计数查询示例
简单的计数查询没有太多。它基本上会给你表格中的记录数。以下是该类型查询的示例:
从产品中选择Count(*)作为Product_Count;
此查询将返回此结果集:
product_count. |
10. |
这告诉我们,我们的视觉计数是对的,但现在我们可以使用连接到我们的数据库的软件来处理结果,因为我们有数据。它只是表明表中记录的简单计数或我们第一个选择查询的行计数。大多数数据库引擎都配置为通过执行此操作,使其如此快速地进行查询,返回行计数。
如果我们想要的只是产品表的行计数,则此查询工作。但是,通过添加where子句,我们可以创建更有用的查询。
注意,我们在查询中使用了COUNT(*)。添加星号只是计算结果查询中的行数。另一个选项是使用COUNT(1)。使用1而不是星号所做的是将1附加到查询结果集中的每个结果上,然后对其进行计数。甚至还有另一种选择。由于最后一个选项向count添加了一个值,所以我们可以使用count (id)或count (name)对现有值进行计数来替换该选项。结果将是一样的。这只是做同一件事的三种不同方式。
您应该使用count(*)版本。大多数关系数据库,即看到此版本的计数将通过访问表中的索引来计算行,这将针对速度进行优化。如果使用count(name),则数据库引擎实际上可以在列中检查每个值,从而导致较慢的查询。如果我们使用Count(1)格式,因此在剩下的示例中,我们将在需要的情况下使用Count函数中的星号。
SQL计数与其中示例的位置
最后一个查询给了我们一个简单的产品表。我们还可以添加一个where子句来过滤产品,然后计算结果记录。这是一个查询,我们计算Brand_ID为101的所有记录:
从Brand_id = 101的产品中选择Count(*)作为Product_Count;
此查询将返回此结果:
product_count. |
3. |
我们可以继续为每个Brand_ID运行查询,以获取每个产品的所有产品。我们还可以做到同样的事情,以找到特定国家的产品数量。以下是计算加拿大来自的所有产品的查询:
SELECT COUNT(*) AS product_count FROM Products WHERE country = '加拿大';
此查询将返回此结果集:
product_count. |
1 |
使用SQL计数处理NULL值
请记住,当我们说表中的某些列有空值,当我们运行我们的第一个计数查询时,它只忽略了所有这些空值并计算查询中的所有行?我们可以用查询处理这些问题以将它们过滤掉。例如,如果我们只想要一计数具有Brand_id的产品,我们可以使用以下查询:
从Brand_ID不为空的产品中选择Count(*)作为Product_Count;
该查询的结果如下:
product_count. |
8. |
请注意,当我们在列中检查空无效时,我们使用不同的语法。我们不使用等号。相反,检查值是否为null或不是null。
通过使用组的SQL计数获取多个计数
COUNT是一个SQL聚合函数,但是到目前为止,我们所看到的查询都没有返回一个以上的计数。现在是使用GROUP BY并展示COUNT可以做更多工作的时候了。GROUP BY所做的是根据GROUP BY函数中列出的列将类似的行分组成一行。一旦记录像这样分组,聚合函数就可以在每个组上单独运行。
因此,如果我们想计算每个Brand_id中的所有产品,我们都可以用一个查询来做。这是查询:
选择Brand_ID,Count(*)作为Brand_ID产品组的Product_Count;
查询将返回以下结果:
Brand_id. | product_count. |
零 | 2 |
One hundred. | 2 |
101 | 3. |
102 | 1 |
103 | 2 |
请注意,null brand_id再次出现。要返回实际上具有Brand_id的产品的计数,您可以将查询更改为:
从Brand_ID不空组的产品中选择Brand_ID,Count(*)作为Product_Count;
我们还可以运行类似的查询来获取来自每个国家的产品数量。这次,我们将过滤掉空国家值。这是查询:
选择国家/地区,计数(*)作为Product_Count从国家/地区不是国家没有NULL组;
此查询的结果将如下所示:
国家 | product_count. |
加拿大 | 1 |
意大利 | 1 |
墨西哥 | 1 |
美国 | 3. |
使用群组按子句小心。您必须确保可以分组查询的所有列。在上面的计数查询中,请注意,我们只返回了我们将查询分组的列和每个组的计数。像以下内容的查询无法正常工作或返回奇怪的结果:
SELECT country, COUNT(*) AS product_count FROM Products WHERE country不是NULL GROUP BY brand_id;
此查询将返回此结果:
国家 | product_count. |
美国 | 2 |
美国 | 2 |
加拿大 | 2 |
查询以SQL Sense工作。它返回结果,但他们对我们无用。最后一个查询的问题是我们通过Brand_ID分组结果,但我们正在尝试在结果集中返回该国。
使用核心和分区
我们已经使用了Group来组分组了数据库记录,因此我们可以在每个品牌中获得产品数量。通过截然不同地使用和分区,我们可以获得相同的结果。这是查询:
选择Distinct Brand_ID,count(name)over(brand_id分区)从产品中作为product_count;
这个查询返回一组结果:
Brand_id. | product_count. |
零 | 2 |
One hundred. | 2 |
101 | 3. |
102 | 1 |
103 | 2 |
这些结果是我们从集团获得的结果。您应该记得使用DISTINCT,否则您将获得这些结果:
Brand_id. | product_count. |
零 | 2 |
零 | 2 |
One hundred. | 2 |
One hundred. | 2 |
101 | 3. |
101 | 1 |
101 | 1 |
102 | 1 |
103 | 2 |
103 | 2 |
使用SQL COUNT获得不同的计数
您可以与Count函数一起使用的另一种有用的SQL关键字是不同的。查看示例表中的价格列。那里有10个值,就像每个列中有很多这些重复。如果我们想计算不同的价格值,我们可以使用此查询进行:
SELECT COUNT(DISTINCT price) AS DISTINCT t_price_count FROM Products;
查询的结果是这样的:
distinct_price_count. |
5. |
所以我们只有五个不同的价格价值。
分组,包括SQL Count总数
我们还可以为产品表编写查询,这不仅为我们提供了品牌中的每个产品的计数,还提供了包含所有产品总数的最后一行。分组指示按列表中的组中的特定列表达式是否汇总。如果它和0,如果不是,它将返回1。这是查询:
在分组(brand_id)= 1然后'total:'brand_id以brand_id结尾时选择案例,从andrand_id按Brand_id订单(brand_id),brand_id nour null nout null组的产品中的count(*)product_count;
Brand_id. | product_count. |
One hundred. | 2 |
101 | 3. |
102 | 1 |
103 | 2 |
全部的: | 8. |
我们还使用查询中的案例语句来确定我们是否应该返回总计的Brand_id行或行。当Brand_id为NULL结果时,我们还会删除记录。我们还使用Order By子句以确保总行为最终记录。
顶尖发展课程betwayapp下载安装
使用其他聚合函数的SQL计数
您还可以使用其他聚合函数以及SQL查询中的计数。如果我们想返回每个国家的产品数量,以及产品的平均价格提供,我们可以写一个像下面的产品一样,以获得这些结果。
选择国家/地区,计数(*)作为Product_Count,AVG(价格)作为Price_Average从国家没有NULL GROUP的产品;
此查询的结果如下:
国家 | product_count. | price_average |
加拿大 | 1 | 3. |
意大利 | 1 | 1 |
墨西哥 | 1 | 3. |
美国 | 3. | 4. |
AVG和COUNT功能都将在同一组分组结果上执行。
结论
您可以使用SQL查询多得多,而不是返回存储在数据库中的数据。关系数据库引擎也具有您可以在查询中返回的结果上执行的内置函数。计数是其中一个函数。count是一个聚合函数,返回传递给它的项目的计数。这些项目可以是来自数据库表的列或来自SQL表达式的结果。使用与SQL中可用的其他功能的计数,您可以编写向您使用的简单数据检索过程添加数据分析的查询。
count命令是最有用的SQL命令之一,但它只是您可以使用数据库语言执行的一小部分。让我们通过学习如何使用SQL AVG命令继续我们的路径来实现SQL。