ach*_*san 3 mysql count group-by
这不是我的工作,也不是我的家庭作业。我刚刚从 Donatus 教授的 udemy 课程中自学,这些是他在课程中使用的问题。
目标 1: 您的物流经理想要了解每个运输区域在公司数据库中出现的次数。使用 SQL 查询来获取详细信息。
目标 2: 使用 Shipregion 列,计算每个值在该列中出现的次数。
数据库:北风
表:订单
解决方案1:
SELECT ShipRegion,
COUNT(ShipRegion)
FROM
orders
GROUP BY ShipRegion;
Run Code Online (Sandbox Code Playgroud)
解决方案2:
SELECT ShipRegion,
COUNT(*)
FROM
orders
GROUP BY ShipRegion;
Run Code Online (Sandbox Code Playgroud)
我理解第一个解决方案,但不理解第二个解决方案。
我的困惑: COUNT(*) 如何确保只计算所有船舶区域?是因为使用了group by shipregion吗?
如果是这种情况,在上面的解决方案中,我们还使用g COUNT(shipregion)。我不明白。请帮忙。
COUNT() 函数是一个聚合函数,它返回表中的行数。COUNT() 函数允许您计算所有行或仅计算符合指定条件的行。
COUNT() 函数具有三种形式:
COUNT(*),COUNT(expression)COUNT(DISTINCT expression)COUNT(*)功能
该COUNT(*)函数返回 SELECT 语句返回的结果集中的行数。返回COUNT(*)行数,包括重复行、非 NULL 行和 NULL 行。
COUNT(expression)
返回COUNT(expression)不包含 NULL 值作为表达式结果的行数。
COUNT(DISTINCT expression)
COUNT(DISTINCT 表达式) 返回不包含 NULL 值的不同行数作为表达式的结果。
该COUNT()函数的返回类型是BIGINT。COUNT() 如果没有找到匹配的行,该函数返回 0。
根据您的数据考虑一个简化的示例
CREATE TABLE `orders` (
`ShipRegion` varchar(6)
) ;
INSERT INTO `orders` VALUES (null),(null),('RJ'),('RJ'),('RJ'),('SP'),('NM'),('NM');
Run Code Online (Sandbox Code Playgroud)
查询1,
SELECT ShipRegion,
COUNT(*)
FROM orders
GROUP BY ShipRegion;
Run Code Online (Sandbox Code Playgroud)
结果
ShipRegion COUNT(*)
null 2
RJ 3
SP 1
NM 2
Run Code Online (Sandbox Code Playgroud)
查询2,
SELECT ShipRegion,
COUNT( ShipRegion)
FROM orders
GROUP BY ShipRegion;
Run Code Online (Sandbox Code Playgroud)
结果
ShipRegion COUNT( ShipRegion)
null 0
RJ 3
SP 1
NM 2
Run Code Online (Sandbox Code Playgroud)
查询3,
SELECT ShipRegion,
COUNT(distinct ShipRegion)
FROM orders
GROUP BY ShipRegion;
Run Code Online (Sandbox Code Playgroud)
结果
ShipRegion COUNT(distinct ShipRegion)
null 0
NM 1
RJ 1
SP 1
Run Code Online (Sandbox Code Playgroud)
我的困惑:如何确保
COUNT(*)只计算所有船舶区域?是因为使用了group by shipregion吗?
是的,该COUNT(*)函数经常与子句一起使用GROUP BY,以返回每个组中的元素数量。
在第一个目标中,我认为您需要应用 Shipregion 不为空的位置,因为 null 不等于任何内容
SELECT ShipRegion,
COUNT(*)
FROM orders
WHERE ShipRegion is not null
GROUP BY ShipRegion;
Run Code Online (Sandbox Code Playgroud)
在这里查看演示
阅读有关计算行数的更多信息