【问题标题】:MYSQL Nodejs APP : GROUP BY clause and contains nonaggregated columnMYSQL Nodejs APP:GROUP BY 子句并包含非聚合列
【发布时间】:2022-01-17 06:45:24
【问题描述】:

我有这个功能来获取薪水,

当我执行这个 api 时,

我得到那个错误: "SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列 'projects_managment.salary.salaryDate';这与 sql_mode=only_full_group_by 不兼容",

async function getSalaryByMonth(currentMonth) {
  const month = moment(currentMonth).month() + 1;
  const year = moment(currentMonth).year();
  const values = [currentMonth, currentMonth, month, year];
  console.log(values);
  const query = `
  SELECT 
  ${process.env.DB_SCHEMA}.salary.salaryDate as salaryDate,
  ${process.env.DB_SCHEMA}.employee.id AS employeeId,
  ${process.env.DB_SCHEMA}.employee.firstName AS firstName,
  ${process.env.DB_SCHEMA}.employee.lastName AS lastName,
  ${process.env.DB_SCHEMA}.salary.salary,
(SELECT 
          dailywage
      FROM
          ${process.env.DB_SCHEMA}.employeeDailyWage
      WHERE
          startFromDate <= ?
              AND ${process.env.DB_SCHEMA}.employeeDailyWage.employeeId = ${process.env.DB_SCHEMA}.employee.id
      ORDER BY startFromDate DESC
      LIMIT 1) AS dailyWage,
(SELECT 
          startFromDate
      FROM
          ${process.env.DB_SCHEMA}.employeeDailyWage
      WHERE
          startFromDate <= ?
              AND ${process.env.DB_SCHEMA}.employeeDailyWage.employeeId = ${process.env.DB_SCHEMA}.employee.id
      ORDER BY startFromDate DESC
      LIMIT 1) AS startFromDate
FROM
  ${process.env.DB_SCHEMA}.employeesTimeSheet
  Left Join                 
 ${process.env.DB_SCHEMA}.employee ON ${process.env.DB_SCHEMA}.employeesTimeSheet.employeeId = ${process.env.DB_SCHEMA}.employee.id
  left join 
${process.env.DB_SCHEMA}.salary ON ${process.env.DB_SCHEMA}.salary.employeeId = ${process.env.DB_SCHEMA}.employee.id
WHERE
  MONTH(salaryDate) = ? AND YEAR(salaryDate) = ?
GROUP BY  ${process.env.DB_SCHEMA}.employee.id
ORDER BY ${process.env.DB_SCHEMA}.employee.id asc  
`;
  const [rows] = await connection.execute(query, values);
  return rows;
}

【问题讨论】:

标签: mysql node.js


【解决方案1】:

所有需要知道的都在错误消息中。

3 个解决方案:

  • 从 sql_mode 中删除 only_full_group_by"
  • 或从您的查询中删除 projects_managment.salary.salaryDate
  • 或对其使用聚合函数 (avg/min/max/group_concat/...)

【讨论】:

  • 你好,谢谢你,我已经从 sql_mode 中删除了 only_full_group_by,但我正在询问另一个解决方案,如果我想添加 projects_managment.salary.salaryDate
猜你喜欢
  • 2017-06-22
  • 2016-12-12
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 2016-04-27
  • 1970-01-01
  • 2012-02-09
  • 1970-01-01
相关资源
最近更新 更多