我正在尝试获取包含以下详细信息的销售人员列表 EmpId,连续3年A级业务员。
我编写了以下查询但出现错误。
SELECT salesman, empid
FROM Sales_temp
where rating = 'A'
AND(select max(year), min(year) from Sales_temp
having (max(year)-min(year) = 3))
AND Count(year)=3
为了过滤连续 3 年的“A”评级数据,我使用了以下逻辑:
A 评级的最大(年)减去 A 评级的最小(年)的差 = 3 计数(年)=3。但是,我收到一个错误:
scalar sub query can't have more than one column
请推荐。
最佳答案
我想到在 MySQL 中执行此操作的唯一方法是自行连接表两次,然后由销售人员聚合。然后,断言销售员是否至少有一个连续三个 A 评级的记录:
SELECT
s1.salesman, s1.empid
FROM Sales_temp s1
INNER JOIN Sales_temp s2
ON s1.empid = s2.empid AND s2.year = s1.year + 1
INNER JOIN Sales_temp s3
ON s2.empid = s3.empid AND s3.year = s2.year + 1
GROUP BY
s1.salesman, s1.empid
HAVING
SUM(CASE WHEN s1.rating = 'A' AND s2.rating = 'A' AND s3.rating = 'A'
THEN 1 ELSE 0 END) > 0;
Demo
中间连接表会很丑陋,但足以说明它为 Sales_temp
中的每条记录提供了与下一年配对的机会,然后是下一年的配对。如果三元组可能发生,并且所有三个评级都是 A
质量,那么该销售员将出现在结果集中。
关于mysql - 使用 group by with where 子句时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51471859/