相关子查询以查找某些组的平均值
Correlated Subquery to find AVG of certain groups
问题!我正在尝试列出所有书籍及其相应的书籍主题、平均成本和常规成本。
到目前为止我的查询是...
SELECT BOOK_SUBJECT, AVG( BOOK_COST )
FROM BOOK
GROUP BY BOOK_SUBJECT
此查询提供了四组总成本的平均值。 Final out put should look like this 我需要引入 BOOK_NUM
、BOOK_TITLE
、BOOK_SUBJECT
、BOOK_COST
,但我无法弄清楚。有人可以帮忙吗?相关子查询?
使用子查询来执行此操作:
SELECT BOOK.BOOK_NUM, BOOK.BOOK_TITLE, BOOK.BOOK_SUBJECT, BOOK.BOOK_COST, T.AVG_COST
FROM BOOK
INNER JOIN (
SELECT BOOK_SUBJECT, AVG(BOOK_COST) AVG_COST
FROM BOOK
GROUP BY BOOK_SUBJECT
) T ON BOOK.BOOK_SUBJECT = T.BOOK_SUBJECT
请尝试以下...
SELECT BOOK_NUM AS Number,
BOOK_TITLE AS Title,
BOOK.BOOK_SUBJECT AS Subject,
BOOK_COST AS Cost,
AVG_BOOK_COST AS 'Avg Cost'
FROM BOOK
JOIN ( SELECT BOOK_SUBJECT AS BOOK_SUBJECT,
AVG( BOOK_COST ) AS AVG_BOOK_COST
FROM BOOK
GROUP BY BOOK_SUBJECT
) AS SUBJECT_AVG_FINDER ON BOOK.BOOK_SUBJECT = SUBJECT_AVG_FINDER.BOOK_SUBJECT
ORDER BY BOOK_NUM;
要计算每个主题的平均值,我们必须将 BOOK
的内容按 BOOK_SUBJECT
分组,然后使用 AVG( BOOK_COST )
计算每组的平均值。但我们也希望避免对 BOOK
中的其他字段进行分组,而是让 Book 中每条记录的指定字段在末尾显示其 BOOK_SUBJECT
的平均成本。这表明 BOOK
和用于查找每个主题的平均成本的子查询之间的 INNER JOIN
。
我使用以下代码计算 BOOK
...
中列出的每个主题的平均成本
SELECT BOOK_SUBJECT AS BOOK_SUBJECT,
AVG( BOOK_COST ) AS AVG_BOOK_COST
FROM BOOK
GROUP BY BOOK_SUBJECT
我们需要 select BOOK_SUBJECT
部分是因为 GROUP BY
子句需要它,部分是因为我们需要它来将此子查询生成的 table 加入到BOOK
.
的未分组列表
给 AVG( BOOK_COST )
别名 AVG_BOOK_COST
可以更容易地引用这个生成的字段。
在单词 JOIN
之前没有连接类型的情况下,大多数版本的 SQL 将采用 INNER JOIN
,尽管所有版本都允许使用 INNER JOIN
并且一些要求你这样做。默认情况下,我和许多其他人只是使用 JOIN
.
执行连接后,来自 BOOK
的每条记录都将从我们的子查询(我给它的别名是 SUBJECT_AVG_FINDER
)中获得对应记录的副本,每条记录有两个名为 BOOK_SUBJECT
的字段。为了不混淆您的 SQL 版本,我们必须指定 table / 子查询以及发生此类重复的字段名称,因此在整个语句的第三行中指定 BOOK.BOOK_SUBJECT
。
已根据您想要的最终输出图像为每个字段指定别名。
我假设没有必要复制行号字段。如果不正确,请另行说明。
最后,我通过添加行 ORDER BY BOOK_NUM
.
根据您想要的输出对结果进行了排序
作为提示,尽管允许,但您应该避免大声喊叫(即全大写)您的字段名称、table 名称和别名(除非您被要求这样做),但仍然大声喊叫SQL 的东西(比如 SELECT
、FROM
、AS
等)。通过提供关于如何尝试使用每个单词的视觉线索,这可以使语句更易于阅读和调试。我建议采用以下方式来呈现我们的 SQL 声明...
SELECT book_num AS Number,
book_title AS Title,
book.book_subject AS Subject,
book_cost AS Cost,
avg_book_cost AS 'Avg Cost'
FROM book
JOIN ( SELECT book_subject AS book_subject,
AVG( book_cost ) AS avg_book_cost
FROM book
GROUP BY book_subject
) AS subject_avg_finder ON book.book_subject = subject_avg_finder.book_subject
ORDER BY book_num;
如果您有任何问题或意见,请随时post发表相应的评论。
使用此代码
SELECT BOOK_NUM, BOOK_TITLE, BOOK_SUBJECT, BOOK_COST,
AVG(BOOK_COST) OVER(PARTITION BY BOOK_SUBJECT) AS AVG_COST
FROM BOOK
问题!我正在尝试列出所有书籍及其相应的书籍主题、平均成本和常规成本。
到目前为止我的查询是...
SELECT BOOK_SUBJECT, AVG( BOOK_COST )
FROM BOOK
GROUP BY BOOK_SUBJECT
此查询提供了四组总成本的平均值。 Final out put should look like this 我需要引入 BOOK_NUM
、BOOK_TITLE
、BOOK_SUBJECT
、BOOK_COST
,但我无法弄清楚。有人可以帮忙吗?相关子查询?
使用子查询来执行此操作:
SELECT BOOK.BOOK_NUM, BOOK.BOOK_TITLE, BOOK.BOOK_SUBJECT, BOOK.BOOK_COST, T.AVG_COST
FROM BOOK
INNER JOIN (
SELECT BOOK_SUBJECT, AVG(BOOK_COST) AVG_COST
FROM BOOK
GROUP BY BOOK_SUBJECT
) T ON BOOK.BOOK_SUBJECT = T.BOOK_SUBJECT
请尝试以下...
SELECT BOOK_NUM AS Number,
BOOK_TITLE AS Title,
BOOK.BOOK_SUBJECT AS Subject,
BOOK_COST AS Cost,
AVG_BOOK_COST AS 'Avg Cost'
FROM BOOK
JOIN ( SELECT BOOK_SUBJECT AS BOOK_SUBJECT,
AVG( BOOK_COST ) AS AVG_BOOK_COST
FROM BOOK
GROUP BY BOOK_SUBJECT
) AS SUBJECT_AVG_FINDER ON BOOK.BOOK_SUBJECT = SUBJECT_AVG_FINDER.BOOK_SUBJECT
ORDER BY BOOK_NUM;
要计算每个主题的平均值,我们必须将 BOOK
的内容按 BOOK_SUBJECT
分组,然后使用 AVG( BOOK_COST )
计算每组的平均值。但我们也希望避免对 BOOK
中的其他字段进行分组,而是让 Book 中每条记录的指定字段在末尾显示其 BOOK_SUBJECT
的平均成本。这表明 BOOK
和用于查找每个主题的平均成本的子查询之间的 INNER JOIN
。
我使用以下代码计算 BOOK
...
SELECT BOOK_SUBJECT AS BOOK_SUBJECT,
AVG( BOOK_COST ) AS AVG_BOOK_COST
FROM BOOK
GROUP BY BOOK_SUBJECT
我们需要 select BOOK_SUBJECT
部分是因为 GROUP BY
子句需要它,部分是因为我们需要它来将此子查询生成的 table 加入到BOOK
.
给 AVG( BOOK_COST )
别名 AVG_BOOK_COST
可以更容易地引用这个生成的字段。
在单词 JOIN
之前没有连接类型的情况下,大多数版本的 SQL 将采用 INNER JOIN
,尽管所有版本都允许使用 INNER JOIN
并且一些要求你这样做。默认情况下,我和许多其他人只是使用 JOIN
.
执行连接后,来自 BOOK
的每条记录都将从我们的子查询(我给它的别名是 SUBJECT_AVG_FINDER
)中获得对应记录的副本,每条记录有两个名为 BOOK_SUBJECT
的字段。为了不混淆您的 SQL 版本,我们必须指定 table / 子查询以及发生此类重复的字段名称,因此在整个语句的第三行中指定 BOOK.BOOK_SUBJECT
。
已根据您想要的最终输出图像为每个字段指定别名。
我假设没有必要复制行号字段。如果不正确,请另行说明。
最后,我通过添加行 ORDER BY BOOK_NUM
.
作为提示,尽管允许,但您应该避免大声喊叫(即全大写)您的字段名称、table 名称和别名(除非您被要求这样做),但仍然大声喊叫SQL 的东西(比如 SELECT
、FROM
、AS
等)。通过提供关于如何尝试使用每个单词的视觉线索,这可以使语句更易于阅读和调试。我建议采用以下方式来呈现我们的 SQL 声明...
SELECT book_num AS Number,
book_title AS Title,
book.book_subject AS Subject,
book_cost AS Cost,
avg_book_cost AS 'Avg Cost'
FROM book
JOIN ( SELECT book_subject AS book_subject,
AVG( book_cost ) AS avg_book_cost
FROM book
GROUP BY book_subject
) AS subject_avg_finder ON book.book_subject = subject_avg_finder.book_subject
ORDER BY book_num;
如果您有任何问题或意见,请随时post发表相应的评论。
使用此代码
SELECT BOOK_NUM, BOOK_TITLE, BOOK_SUBJECT, BOOK_COST,
AVG(BOOK_COST) OVER(PARTITION BY BOOK_SUBJECT) AS AVG_COST
FROM BOOK