mysql - 使用 group by with where 子句时出错

标签 mysql sql

我正在尝试获取包含以下详细信息的销售人员列表 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/

相关文章:

sql - Access 仅匹配一个的vba sql

sql - 从函数中检索多个值

mysql - mysql中重复记录的编号

php - CSV 上传后自动构建 mySql 表

sql - 组内数据样本 - Teradata

sql - 在 PL/SQL/Oracle Forms 中搜索

php - 如何将父ID输入到不同表的数据库中

mysql - 如何在一列中仅显示一条数据,而另一列中列出多行数据

php - while 循环中的 while (mysql_fetch_array)

mysql - 在 DbVisualizer 中创建 HSQLDB 过程