Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何根据与分组总和的平均值相比较的分组总和进行选择_Mysql_Sql_Mysql Workbench_Mysql Error 1111 - Fatal编程技术网

Mysql 如何根据与分组总和的平均值相比较的分组总和进行选择

Mysql 如何根据与分组总和的平均值相比较的分组总和进行选择,mysql,sql,mysql-workbench,mysql-error-1111,Mysql,Sql,Mysql Workbench,Mysql Error 1111,我有一张由电影、类别和价格组成的表格。 现在我只想选择总价格(该类别下每部电影的所有价格之和)高于这些类别总价格平均值的类别。 我已经能够找到平均的总价格(感谢这个网站),但不能结合起来。 以下是查询: -- Return the average sums of the price per category SELECT AVG(sum_price) FROM ( SELECT category, sum(price) AS sum_price FROM film_list GROUP BY

我有一张由电影、类别和价格组成的表格。 现在我只想选择总价格(该类别下每部电影的所有价格之和)高于这些类别总价格平均值的类别。 我已经能够找到平均的总价格(感谢这个网站),但不能结合起来。 以下是查询:

-- Return the average sums of the price per category
SELECT AVG(sum_price)
FROM 
(
SELECT category, sum(price) AS sum_price
FROM film_list
GROUP BY category
) AS inner_query;

-- Return category and its total price
SELECT category, SUM(price)
FROM film_list
GROUP BY category;

--[Error] Return only the category with sums of price larger than the average of sum of prices
SELECT category, SUM(price)
FROM film_list
WHERE SUM(price) >
(
   SELECT AVG(sum_price)
   FROM 
   (
       SELECT category, sum(price) AS sum_price
       FROM film_list
       GROUP BY category
   ) AS inner_query
);

任何帮助都将不胜感激,谢谢

使用窗口函数最容易解决此问题:

SELECT c.*
FROM (SELECT category, SUM(price) AS sum_price,
             AVG(SUM(price)) OVER () as avg_total_price
      FROM film_list
      GROUP BY category
     ) c
WHERE sum_price > avg_total_price

使用窗口函数最容易解决此问题:

SELECT c.*
FROM (SELECT category, SUM(price) AS sum_price,
             AVG(SUM(price)) OVER () as avg_total_price
      FROM film_list
      GROUP BY category
     ) c
WHERE sum_price > avg_total_price

尝试添加
groupby
,然后使用
having

SELECT category, SUM(price)
FROM film_list
GROUP BY category
HAVING SUM(price) >
(
   SELECT AVG(sum_price)
   FROM 
   (
       SELECT category, sum(price) AS sum_price
       FROM film_list
       GROUP BY category
   ) AS inner_query
);

尝试添加
groupby
,然后使用
having

SELECT category, SUM(price)
FROM film_list
GROUP BY category
HAVING SUM(price) >
(
   SELECT AVG(sum_price)
   FROM 
   (
       SELECT category, sum(price) AS sum_price
       FROM film_list
       GROUP BY category
   ) AS inner_query
);

请提供示例数据和所需结果。您可能希望使用
HAVING
子句。请提供示例数据和所需结果。您可能希望使用
HAVING
子句。哇,真管用!谢谢哇,真管用!谢谢它起作用了!刚才查了OVER子句,现在我知道了窗口函数。谢谢它起作用了!刚才查了OVER子句,现在我知道了窗口函数。谢谢