【发布时间】: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;
}
【问题讨论】: