【问题标题】:sql average of a sum divided by a count总和除以计数的sql平均值
【发布时间】:2011-11-07 16:46:50
【问题描述】:

我正在尝试执行 SQL 查询来获取特定客户的平均支出。

我已经写了下面的 SQL(这个例子稍微删减了)..

SELECT SUM(price) as sumPrice, COUNT(transactionId) as transactionCount, customerName
FROM customers, transactions
WHERE customers.customerId = transactions.customerId
AND transactiontypeId = 1
GROUP BY customers.customerId

这给了我交易和计数的总和。有了这个,我可以将总和除以计数以获得平均支出。但是,我希望能够直接从数据库中获取平均值作为值,而不是在获取数据后对其进行操作。

有没有办法做到这一点?我玩过在一个选择中写一个选择,但到目前为止还没有运气,因此在这里询问。

提前致谢

【问题讨论】:

  • 对不起,我在这个查询的末尾有一个 group by.. 我会更新它
  • 仍然不会在大多数其他 RDBMS 中解析,因为您的 GROUPING BY 与 SELECT 列表中的字段不同

标签: sql count sum average


【解决方案1】:

MySQL 内置了平均函数。

SELECT AVG(price) AS averageSpend, customerName
FROM customers, transactions
WHERE customers.customerId = transactions.customerId
AND transactiontypeId = 1
GROUP BY customers.customerId

【讨论】:

  • 这样就可以计算出与客户相关的行数(交易)的平均值?
  • AVG(price) 将给出与SUM(price) / COUNT(transactions) 相同的结果(将它们相加,除以计数),因为AVG() 使用的计数是返回的总行数。
  • 呵呵,别傻了。有时一个问题只需要一双新的眼睛。
  • @Polynomial AVG 从其计算中排除空值。因此,它与没有附加 where 子句的 SUM 除以 COUNT 不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
相关资源
最近更新 更多