在这种情况下,我无法弄清楚 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(*) 特别避免了任何值比较,而其他形式的计数将在一定程度上检查列值。

如果结果集中有一个唯一值并且该列已编入索引,那么您可能会通过仅计算该列而不是所有行来获得一些性能提升。

其他阅读: