在这种情况下,我无法弄清楚 COUNT(*) 是如何计算帐户数量的?一直很迷惑写count(*)
I am unable to figure out how COUNT(*) is calculating number of accounts in this case? It has always been confusing writing count(*)
我遇到了概念问题。非常感谢您的帮助。
我有两个表,一个是帐户(有 id、sales_rep_id、名称作为列)和 sales_reps(有 id、名称作为列)。我想做以下查询:
有多少销售代表管理着 5 个以上的客户?
我得到了答案,但我在这里有一个概念性问题,这里 COUNT(*) 指向什么(帐户数量没问题,但我无法理解我们如何证明这一点)。
谢谢!
SELECT s.id, s.name, COUNT(*) num_accounts
FROM accounts a
JOIN sales_reps s
ON s.id = a.sales_rep_id
GROUP BY s.id, s.name
HAVING COUNT(*) > 5
ORDER BY num_accounts;
如果没有 join
:
想起来可能更容易理解
SELECT a.sales_rep_id, COUNT(*) as num_accounts
FROM accounts a
GROUP BY a.sales_rep_id
HAVING COUNT(*) > 5
ORDER BY num_accounts;
这是在计算 accounts
中具有相同销售代表的行数。 join
只是引入了 sales_rep
的名称;它不会更改行数(假设连接键匹配)。
*
表示应评估所有行以确定计数,无论是否为空或唯一。
这里有一个很好的总结:MySQL COUNT And COUNT DISTINCT With Examples
COUNT(*) function returns the no. of rows retrieved by the SELECT statement including rows containing NULL and Duplicate values
SELECT COUNT(*) FROM {tableName}
COUNT(Expression) would count the value where expression is not null.
Expression can be something simple like a column name or a complex expression such as IF Function.
SELECT COUNT(Expression) from {tableName}
COUNT(DISTINCT Expression) - DISTINCT
keyword would result in counting only unique non null values against the expression.
For example - COUNT(DISTINCT customerName) - would only count rows having distinct values for customer name
SELECT COUNT(DISTINCT expression) from {tableName}
从性能的角度来看,在 MySQL 和大多数其他 RDBMS 中,COUNT(*)
特别避免了任何值比较,而其他形式的计数将在一定程度上检查列值。
如果结果集中有一个唯一值并且该列已编入索引,那么您可能会通过仅计算该列而不是所有行来获得一些性能提升。
其他阅读:
我遇到了概念问题。非常感谢您的帮助。
我有两个表,一个是帐户(有 id、sales_rep_id、名称作为列)和 sales_reps(有 id、名称作为列)。我想做以下查询:
有多少销售代表管理着 5 个以上的客户?
我得到了答案,但我在这里有一个概念性问题,这里 COUNT(*) 指向什么(帐户数量没问题,但我无法理解我们如何证明这一点)。
谢谢!
SELECT s.id, s.name, COUNT(*) num_accounts
FROM accounts a
JOIN sales_reps s
ON s.id = a.sales_rep_id
GROUP BY s.id, s.name
HAVING COUNT(*) > 5
ORDER BY num_accounts;
如果没有 join
:
SELECT a.sales_rep_id, COUNT(*) as num_accounts
FROM accounts a
GROUP BY a.sales_rep_id
HAVING COUNT(*) > 5
ORDER BY num_accounts;
这是在计算 accounts
中具有相同销售代表的行数。 join
只是引入了 sales_rep
的名称;它不会更改行数(假设连接键匹配)。
*
表示应评估所有行以确定计数,无论是否为空或唯一。
这里有一个很好的总结:MySQL COUNT And COUNT DISTINCT With Examples
COUNT(*) function returns the no. of rows retrieved by the SELECT statement including rows containing NULL and Duplicate values
SELECT COUNT(*) FROM {tableName}
COUNT(Expression) would count the value where expression is not null. Expression can be something simple like a column name or a complex expression such as IF Function.
SELECT COUNT(Expression) from {tableName}
COUNT(DISTINCT Expression) -
DISTINCT
keyword would result in counting only unique non null values against the expression.
For example - COUNT(DISTINCT customerName) - would only count rows having distinct values for customer nameSELECT COUNT(DISTINCT expression) from {tableName}
从性能的角度来看,在 MySQL 和大多数其他 RDBMS 中,COUNT(*)
特别避免了任何值比较,而其他形式的计数将在一定程度上检查列值。
如果结果集中有一个唯一值并且该列已编入索引,那么您可能会通过仅计算该列而不是所有行来获得一些性能提升。
其他阅读: