【问题标题】:cant seem to get avg() to work with case in sql [closed]似乎无法让 avg() 在 sql 中使用 case [关闭]
【发布时间】:2015-05-15 16:47:04
【问题描述】:

我想使用带有大小写的 average(),但是我下面的命令似乎给了我一个错误,但我不知道为什么

SELECT 
avg(case when price between 0 AND 9 then price end),
avg(case when price between 10 AND 19 then price end),
avg(case when price between 20 AND 29 then price end),
avg(case when price between 30 AND 39 then price end),
avg(case when price between 40 AND 49 then price end)
FROM products;

数据库看起来像这样:

ProductID   ProductName                    Price
1           Chais                           18 
2           Chang                           19 
3           Aniseed Syrup                   33
8           Northwoods Cranberry Sauce      40 
9           Mishi Kobe Niku                 97 

【问题讨论】:

  • 别害羞。在您的问题中包含错误。另外,用您实际使用的数据库标记您的问题。 SQL 服务器?或者,SQLite?
  • 您提供的查询对我来说看起来不错,并且它在您标记的数据库(SQL Server 和 SQLite)以及最新版本的 MySQL、Oracle 和 PostgreSQL 中运行对我来说没有错误。在每种情况下,它都会返回平均值34,这对于给定的数据和查询是正确的。如果您收到错误,那么它似乎不太可能与您提供的查询和数据有关。
  • 你还没有告诉我们错误是什么。

标签: sql sql-server sqlite


【解决方案1】:

也许你需要这样的东西:

select avg (price) from products where price > 30

【讨论】:

  • 不一样。 40 和 10 的平均值是 40 而不是 20。
  • 就是30以上的价格的平均值,所以40是正确的;如果您只需要所有项目的平均值,请删除 where 子句。
  • 平均项目 > 30 不是所述问题。 avg(如果价格 > 30 然后价格为 0 结束)
  • @Blam,您说得对,项目的平均值 > 30 不是陈述的问题,但它可能仍然是理想的结果。
  • 对不起,我应该更具体。我需要不止一列,这就是我没有使用 WHERE 子句的原因。我重新编辑了这个问题。谢谢
猜你喜欢
  • 1970-01-01
  • 2016-02-02
  • 2015-02-06
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
相关资源
最近更新 更多