在MySQL中使用COUNT和MAX函数的例子
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在MySQL中使用COUNT和MAX函数的例子
在MySQL中,count()和MAX()可以使用分组数据的功能。
要了解如何使用它们,可以考虑下面的例子。
例1:使用COUNT
假设你正在管理一个商店出售各种物品的数据库。
你有一个表称为“项目”,与一个唯一的标识符,价格,制造商ID和其他信息的列。
您也可以称为“制造商”每个厂家在商店出售的信息表,列包括一个唯一的标识符和名称。
在项目表的制造商ID对应的厂家表中匹配的行。
如果你想找出在数据库中的每一个制造商的项目是多少,你可以使用这样的查询:
选择作为manu_id,m.manufacturer_name m.manufacturer_id AS manu_name,算作
manu_count(*)
从项目,我
左加入厂商对m.manufacturer_id = i.manufacturer_id米
组按i.manufacturer_id;
此查询的结果可能是遵循以下方针:
+ --------------------------------------- +
图| manu_id manu_name | manu_count |
+ --------------------------------------- +
| 1 |惠特克农场| 12 |
| 2 | ThingMakers | 9 |
| 3 | Smithee | 18 |
XYZ公司| 4 | | 10 |
ABC公司| 5 | | 23 |
+ --------------------------------------- +
COUNT()函数是一个聚合函数,一组由一个GROUP BY子句定义的行。
当您使用GROUP BY子句,MySQL的群体,所有结果行的指定列的值相同(在这种情况下,制造商_id)。
换句话说,它返回行,该列中的每一个不同的值。
聚合函数,如COUNT()给你有关分组的行成员的信息。
COUNT(*)星号意味着计算每个组的成员。
在第一次查询的结果来看,我们可以推断的项目表,包含12行,其制造商_id等于1,9行,其制造商_id 等于2,等等。
例2:利用MAX
MAX()是另一个聚合函数与GROUP BY子句中使用。
它只是返回一个组内的指定列的最大值。
假设,例如,为每个制造商的项目的数量,而不是寻找你想找到价格最昂贵的项目,每个制造商。
你可以使用一个像这样的查询:
选择m.manufacturer_id,原样manu_id,的AS manu_name m.manufacturer_name,最大的AS high_price(i.price)
从项目,我
左加入厂商对m.manufacturer_id = i.manufacturer_id米
组按i.manufacturer_id;
此查询的结果可能看起来像这样:
+ --------------------------------------- +
图| manu_id manu_name | high_price |
+ --------------------------------------- +
| 1 |惠特克农场| 10.95 |
| 2 | ThingMakers | 29 |
| 3 | Smithee | 18.95 |
XYZ公司| 4 | | 50 |
ABC公司| 5 | | 23.95 |
+ --------------------------------------- +
例如3:另一种方法来计算的最高值
有另一种方式来发现的最大订购从最大到最小的行(根据有关列),使用LIMIT子句只返回第一行。
例如,发现大部分项目的制造商,只需添加一个ORDER BY子句(降序)和一个LIMIT子句来第一次查询,像这样:
选择作为manu_id,m.manufacturer_name m.manufacturer_id AS manu_name,算作
manu_count(*)
从项目,我
左加入厂商对m.manufacturer_id = i.manufacturer_id米
GROUP按i.manufacturer_id
ORDER BY manu_count倒序
LIMIT 1;
其结果将是:
+ --------------------------------------- +
图| manu_id manu_name | manu_count |
+ --------------------------------------- +
ABC公司| 5 | | 23 |
+ --------------------------------------- +
例4:包括在输出多行
请注意,然而,此查询将显示,结果只有一个,即使两个或两个以上的制造商正在为大多数项目捆绑。
为了解决这个问题,一个HAVING子句添加到上面的第一个查询。
这允许您筛选通过允许只有那些行的数列相匹配的最大结果行。
找到最大,使用类似于前面的查询,在那里你使用一个ORDER BY和LIMIT子句的子查询。
整个查询看起来像这样:
选择作为manu_id,m.manufacturer_name m.manufacturer_id AS manu_name,算作
manu_count(*)
从项目,我
左加入厂商对m.manufacturer_id = i.manufacturer_id米
GROUP按i.manufacturer_id
有manu_count的AS mcount =(SELECT COUNT(*)
从项目I2
GROUP按i2.manufacturer_id
ORDER BY mcount倒序
极限1);
这个查询的结果将作为先前的结果相同,因为在这个例子中,只有一个制造商,拥有人数最多的项目,23。
但如果有其他制造商说,“关系公司”,有23项在数据库中,那么其结果将是:
+ --------------------------------------- +
图| manu_id manu_name | manu_count |
+ --------------------------------------- +
ABC公司| 5 | | 23 |
| 6 |领带有限公司| 23 |
+ --------------------------------------- +
在此查询,子查询,发现的最大项目数是不依赖于包含查询。
所以MySQL服务器计算一次,提前包含查询结果值23,然后作为一个过滤器对主查询所产生的聚合行HAVING子句中使用。
例如:利用MAX和COUNT在一起
现在考虑一个稍微复杂的例子。
你想找出,每个制造商,其项目的价格最高的是什么,以及如何,他们的许多项目,最高价。
你会再次被绘制项目表制造商分组,结果,但你也可以使用子查询来计算,每个制造商,他们的最高价是什么。
这个子查询的结果将被用于在WHERE子句来限制那些具有最高的价格计算每个制造商的项目。
所以,最终的查询看起来像这样:
选择m.manufacturer_id的AS manu_high_price,COUNT(*)作为manu_high_price_count manu_id的AS manu_name m.manufacturer_name,i.price
从项目,我
左加入厂商对m.manufacturer_id = i.manufacturer_id米
i.price =(SELECT MAX(i2.price)原样high_price的
从项目I2
其中i2.manufacturer_id = i.manufacturer_id
GROUP按i2.manufacturer_id
ORDER BY high_price倒序
极限1)
组按i.manufacturer_id;
其结果将是:
+ ------------------------------------------------- ------ +
| manu_id | manu_name | manu_high_price | manu_high_price_count
+ ------------------------------------------------- ------ +
| 1 |惠特克农场| 10.95 | 4 |
| 2 | ThingMakers | 29 | 9 |
| 3 | Smithee | 18.95 | 1 |
XYZ公司| 4 | | 50 | 20 |
| | ABC公司| 23.95 | 3 |
+ ------------------------------------------------- ------ +
请注意,不像以前的子查询,这个人是依赖于包含查询,因为它使用i.manufacturer_id。
(因此,作为一个相关子查询),MySQL服务器可以不计算提前在前面的例子,它将会包含查询所产生的每一行计算。
这可能会带来更大的数据库的性能问题。
本文来源现代互联IDC数据中心主机租用/list-27.html整理提供
参考资料:/arc-19686-1.html。