mysql - 使用基于 Avg 的 Max 和 Min 来确定最低平均成本和最高平均成本时出错(MySQL)
问题描述
我根据以下标准确定了平均科目费用:
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
仅提取 MIN/MAX 平均成本(四舍五入到小数点后 2 位)
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
推荐阅读
- python - AWS MSK,在配置中 auto.create.topics.enable=true 但不起作用
- vb.net - 接口新手尝试使用VB.NET接口和类创建Plugin系统
- java - Java - 不考虑实例给定值的方法
- c++ - 编译器说关于重新定义错误,但是只在头文件和 C++ 文件中提到的函数
- arduino - 两个超声波传感器可以共享触发电缆吗
- python - 为什么我的聊天过滤器会阻止单词列表顶部的单词?(discord.py)
- reactjs - 反应路由语法
- php - 通过 PHP 的 exec() 运行 PowerShell 命令?
- google-tag-manager - GA4 接收事件名称但没有事件值
- c# - 字符串属性上的外键