mysql - 使用带有 where 子句的 group by 时出错
问题描述
我正在尝试获取具有以下详细信息的销售人员列表 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 的最小(年)之差。但是,我收到一个错误:
标量子查询不能超过一列
请建议。
解决方案
我认为在 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;
演示
中间连接表会很丑陋,但可以说它让每条记录Sales_temp
有机会与下一年配对,然后是后年配对。如果可能出现三重,并且所有三个评级都是A
质量,那么该推销员将出现在结果集中。
推荐阅读
- c++ - C++ Trie 中的浮点异常
- python - 将多个文件从一台主机传输到另一台主机
- regsvr32 - 尝试注册 ISDone.dll 和 unarc.dll 时出现 Regsvr 错误消息
- python - 使用 seaborn 缩放图形的字体,同时保留 matplotlib 的样式
- charts - Chart.js 堆积条形图 - 按值对条形中的值进行排序
- android - Volley StringRequest 仅获得 200 状态码但没有响应正文
- c# - Mock Setup方法在有params参数时抛出异常
- gradle - Gradle 输出缺少生成的 META-INF 文件
- python - 熊猫在几分钟内生成 date_range
- ios - 为什么当我做 presentModalViewController(MyImagePicker) 时,方向是相反的