我有一张表(该表的链接: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
任何帮助都是非常重要的。
答案 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);