SQL - If 语句 "this is incompatible with sql_mode=only_full_group_by"
SQL - If statement "this is incompatible with sql_mode=only_full_group_by"
我有以下SQL
SELECT a.id ,
a.name,
COUNT( se.end_date )
FROM accounts a
INNER JOIN items it
ON it.account_id = a.id
INNER JOIN schedule_elements se
ON it.id = se.item_id
WHERE se.end_date >= '2022.04.04'
GROUP BY a.id,
a.name;
这 return 只有通过 where 子句的行 (275)。我需要 return 所有帐户 (2297),但如果 end_date 是今天或更晚,我只想显示计数。
我试过这个:
SELECT a.id ,
a.name,
IF( se.end_date >= '2022.04.04', COUNT( se.end_date ), ' 0 ')
FROM accounts a
INNER JOIN items it
ON it.account_id = a.id
INNER JOIN schedule_elements se
ON it.id = se.item_id
GROUP BY a.id ,
a.name;
因为我认为如果它大于第 4 个,它会将计数放入,如果不是,则为 0。但是当我 运行 它时,我得到以下信息。
#42000Expression #3 of SELECT list is not in GROUP BY clause and
contains nonaggregated column 'se.end_date' which is not functionally dependent
on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
谷歌搜索错误似乎我可以关闭它,但我无法对数据库进行任何更改,所以我认为这是不可能的。
你应该把条件包含在COUNT()
:
COUNT(CASE WHEN se.end_date >= '2022-04-04' THEN 1 END)
或者,SUM()
:
SUM(se.end_date >= '2022-04-04')
或:
COALESCE(SUM(se.end_date >= '2022-04-04'), 0)
以防万一 end_date
.
中只有空值
如果您真的想要始终显示当前日期,请使用 CURRENT_DATE
而不是 '2022-04-04'
。
我有以下SQL
SELECT a.id ,
a.name,
COUNT( se.end_date )
FROM accounts a
INNER JOIN items it
ON it.account_id = a.id
INNER JOIN schedule_elements se
ON it.id = se.item_id
WHERE se.end_date >= '2022.04.04'
GROUP BY a.id,
a.name;
这 return 只有通过 where 子句的行 (275)。我需要 return 所有帐户 (2297),但如果 end_date 是今天或更晚,我只想显示计数。
我试过这个:
SELECT a.id ,
a.name,
IF( se.end_date >= '2022.04.04', COUNT( se.end_date ), ' 0 ')
FROM accounts a
INNER JOIN items it
ON it.account_id = a.id
INNER JOIN schedule_elements se
ON it.id = se.item_id
GROUP BY a.id ,
a.name;
因为我认为如果它大于第 4 个,它会将计数放入,如果不是,则为 0。但是当我 运行 它时,我得到以下信息。
#42000Expression #3 of SELECT list is not in GROUP BY clause and
contains nonaggregated column 'se.end_date' which is not functionally dependent
on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
谷歌搜索错误似乎我可以关闭它,但我无法对数据库进行任何更改,所以我认为这是不可能的。
你应该把条件包含在COUNT()
:
COUNT(CASE WHEN se.end_date >= '2022-04-04' THEN 1 END)
或者,SUM()
:
SUM(se.end_date >= '2022-04-04')
或:
COALESCE(SUM(se.end_date >= '2022-04-04'), 0)
以防万一 end_date
.
如果您真的想要始终显示当前日期,请使用 CURRENT_DATE
而不是 '2022-04-04'
。