mysql - 1242 - 子查询在子查询中返回多于 1 行

标签 mysql sql

我正在尝试获取每个员工的待处理金额总额。下面的查询工作正常:

SELECT SUM(amount) 
FROM pending
WHERE MONTH < DATE_SUB(curdate() , INTERVAL 1 MONTH) 
GROUP BY class

但是当我尝试将其添加为子查询时,它给出了以下错误:

1242 - Subquery returns more than 1 row

SELECT
  (period_diff(date_format(now(), '%Y%m'),
     date_format(MONTH, '%Y%m'))) AS months,
  pending.amount,
  pending.admission_numb,
  pending.month,
  staff.name,
  staff.class, (
    SELECT SUM(amount) 
    FROM pending
    WHERE MONTH < DATE_SUB(curdate(), INTERVAL 1 MONTH) 
    GROUP BY class
  )
FROM
  pending JOIN staff
  ON pending.admission_numb = staff.admission
GROUP BY admission
ORDER BY CAST( staff.class AS UNSIGNED ) , staff.class

任何帮助将不胜感激..

最佳答案

由于您的子查询返回不止一行(我希望它会为每个类返回一行),因此您需要在 from 子句中加入您的子查询:

SELECT
  (period_diff(date_format(now(), '%Y%m'), date_format(MONTH, '%Y%m'))) AS months,
  pending.amount,
  pending.admission_numb,
  pending.month,
  staff.name,
  staff.class,
  sums.tot
FROM
  pending JOIN staff ON pending.admission_numb = staff.admission
  JOIN  (
    SELECT class, SUM(amount) as tot 
    FROM pending
    WHERE MONTH < DATE_SUB(curdate(), INTERVAL 1 MONTH)
    GROUP BY class
  ) sums on staff.class = sums.class
GROUP BY admission
ORDER BY CAST( staff.class AS UNSIGNED ) , staff.class

关于mysql - 1242 - 子查询在子查询中返回多于 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13553715/

相关文章:

mysql - 有没有办法优化这个MYSQL查询

sql - 条件查询

mysql - 在更新任何表之前创建 MySQL 触发器

mysql - 如何从 select 语句执行 MySQL 多重插入

mysql - 在这种情况下如何更新我的行?

sql - 选择其他列值以及 min(salary),其中可能存在重复的工资

php - MySQL 查询返回资源时出现可怕的 PHP T_STRING 错误

mysql - Symfony2 - 在 json 响应中从我的数据库 MySQL 更改字符

mysql - mysql 中的全文搜索不会检索所有行

mysql - 如何在 DB::select(query) 上使用分页 - Laravel