mysql - 使用基于 Avg 的 Max 和 Min 来确定最低平均成本和最高平均成本时出错 (MySQL)

标签 mysql max average min

我按照以下方式确定了平均科目成本:

FROM BOOK
JOIN
(SELECT BOOK_SUBJECT,
Avg(BOOK_COST) AS AVGCOST
FROM BOOK
GROUP BY BOOK_SUBJECT) AS SUB USING (BOOK_SUBJECT)
ORDER BY BOOK_TITLE;

但是,我现在需要显示某个主题内书籍的最低平均成本和某个主题内书籍的最高平均成本。我知道我需要使用 MIN 和 MAX,但现在不确定语法,因为我必须将其基于 AVG。

这是我的尝试......

SELECT BOOK_SUBJECT
FROM BOOK
WHERE BOOK_COST =
(SELECT MIN(AVGCOST)
FROM BOOK)
ORDER BY BOOK_SUBJECT;

SELECT BOOK_SUBJECT
FROM BOOK
WHERE BOOK_COST =
(SELECT MAX(AVGCOST)
FROM BOOK)
ORDER BY BOOK_SUBJECT;

这会产生 SQL 错误:字段列表中未知列“AVGCOST”。我该如何解决这个问题?我知道它在寻找一个属性但找不到它,那么需要在代码中添加什么以便MySQL计算平均值的最小值和最大值?非常感谢那些做出回应的人,你们的反馈非常好。

最佳答案

我认为你想要实现的是

SELECT *
FROM BOOK
JOIN
(
   SELECT BOOK_SUBJECT,
   AVG(BOOK_COST) AS AVGCOST,
   MIN(BOOK_COST) AS MINCOST,
   MAX(BOOK_COST) AS MAXCOST
   FROM BOOK
   GROUP BY BOOK_SUBJECT
) AS SUB USING (BOOK_SUBJECT)
ORDER BY BOOK_TITLE;

基于

BOOK_SUBJECT BOOK_TITLE BOOK_COST
------------ ---------- ---------------------
MATHS        Book 1     15.99
MATHS        Book 2     14.99
MATHS        Book 3     13.99
ENGLISH      Book A     10.99
ENGLISH      Book B     9.99

返回

BOOK_SUBJECT BOOK_TITLE BOOK_COST AVGCOST MINCOST MAXCOST
------------ ---------- --------- ------- ------- -------
MATHS        Book 1     15.99     14.99   13.99   15.99
MATHS        Book 2     14.99     14.99   13.99   15.99
MATHS        Book 3     13.99     14.99   13.99   15.99
ENGLISH      Book A     10.99     10.49   9.99    10.99
ENGLISH      Book B     9.99      10.49   9.99    10.99

仅获取最小/最大平均成本(四舍五入至小数点后两位)

SELECT 
  ROUND(MIN(MM.AVGCOST), 2) AS MINAVG, 
  ROUND(MAX(MM.AVGCOST), 2) AS MAXAVG
FROM
(
   SELECT BOOK_SUBJECT, 
   AVG(BOOK_COST) AS AVGCOST
   FROM BOOK
   GROUP BY BOOK_SUBJECT
) MM

会回来

MINAVG    MAXAVG
------    ------
10.49     14.99

关于mysql - 使用基于 Avg 的 Max 和 Min 来确定最低平均成本和最高平均成本时出错 (MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53634403/

相关文章:

mysql - Not Acceptable 在此服务器上找不到所请求资源的适当表示。此错误是由 Mod_Security 生成的

Python - MySQL - 'http://www.......................' 中的未知列 'field list'

sql - 如何从表中返回一个值的 MAX 和 MIN?

php - 使用 UPDATE (mysql) 将数据库增加 1。我的代码有什么问题?

mysql - 过滤 DataGrid 中的数据

php - 如何在每个脚本的基础上设置 POST 大小限制?

java - ArrayList 可以包含比 int 的最大值更多的元素吗?

c - 无法计算 C 中 5 个数字的平均值

Python - 图像部分的平均颜色

CakePHP 2.1 用于查询的平均函数