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

x33g5p2x  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(268)

我有一个表(表的链接: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

任何帮助都是值得赞赏的。

nimxete2

nimxete21#

试试这个:

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
               )
uhry853o

uhry853o2#

试试这个:

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 JOININNER JOIN ,因为这会将输出限制为可以加入的记录,即。e。有 sale>asale .
我还添加了 ORDER BY 子句来提高结果的可读性。

kcwpcxri

kcwpcxri3#

为了子孙后代,如果您使用的是mysql版本8或更高版本,那么我们可以在这里使用分析函数:

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

相关问题