查询以查找每年销售额超过平均销售额的推销员列表

时间:2018-07-30 04:54:07

标签: mysql sql

我有一张表(该表的链接:https://docs.google.com/spreadsheets/d/11P_ElrtCXwE3NYAoP-auO7w-Et_zd6omn-v-zMdu8KA/edit?usp=sharing),必须从中查找每年销售量超过平均销售额的销售员列表。

我在下面写了一个查询,但是没有用。

SELECT t1.salesman, t1.AVG(sale), t1.year
SUM(CASE WHEN t1.AVG(sale)>t2.AVG(sale) THEN 1 ELSE 0 END)>0
FROM Sales_temp as t1
LEFT JOIN 
(SELECT t2.year, t2.AVG(sale)
 FROM Sales_temp as t2
 Group by t2.year)
ON t1.year = t2.year
Group by t1.salesman

任何帮助都是非常重要的。

3 个答案:

答案 0 :(得分:2)

尝试一下:

SELECT salesman, sale, year
FROM Sales_temp
INNER JOIN 
(
    SELECT year ayear, AVG(sale) asale
    FROM Sales_temp
    GROUP BY year
) atbl
    ON year = ayear AND sale > asale
ORDER BY year, salesman;

通过为子查询列提供别名,您可以在没有表别名的情况下进行操作。这样可以简化一些事情。我将您的LEFT JOIN更改为INNER JOIN,因为这会将您的输出限制为可以加入 的那些记录,即。 e。有sale>asale

我还添加了ORDER BY子句以提高结果的可读性。

答案 1 :(得分:1)

尝试一下:

SELECT a.salesman, a.sale, a.year
FROM Sales_temp a
where a.sale > ( SELECT avg(b.sale) 
                 FROM Sales_temp b
                 where b.year = a.year
                group by b.year
               )

答案 2 :(得分:0)

为了后人,如果您使用的是MySQL 8或更高版本,那么我们可以在此处使用解析函数:

SELECT year, salesman, sale
FROM Sales_temp
WHERE sale > AVG(sale) OVER (PARTITION BY year);