SELECT 列表的表达式 #3 不在 GROUP BY 子句中,并且在尝试创建视图时包含非聚合列



我尝试从我的表创建一个视图。 当我从 1 个表创建这样的视图时,它工作得很好:

CREATE VIEW v2 AS
SELECT section_id, section_name,  count(*) AS num, count(*) as num1
FROM section_of_science
GROUP BY section_id;
select * from v2;

但是当我尝试从两个表创建视图时,它不起作用:

CREATE VIEW v3 AS
SELECT section_of_science.section_id, section_of_science. section_name,
scientific_areas.areas_name,  count(*) AS num, count(*) as num1
FROM section_of_science,
scientific_areas
GROUP BY section_id;
select * from v3;

我收到此错误:

SELECT 列表的表达式 #3 不在 GROUP BY 子句中,并且包含 非聚合列"Lab3.scientific_areas.区域名称",不是 功能上依赖于 GROUP BY 子句中的列;这是 与 sql_mode=only_full_group_by 不兼容

我做错了什么?

如果您需要更多信息,请告诉我。

您的第一个查询有效,因为您是按主键聚合的。 您显然正在学习 SQL,因此您应该在GROUP BY中包含所有未聚合的列。 稍后您可以了解小效率。

你的第二个应该写成:

SELECT ss.section_id, ss.section_name, ss.areas_name, count(*) AS num
FROM section_of_science ss join
scientific_areas as
ON -- JOIN CONDITIONS HERE
GROUP BY ss.section_id, ss.section_name, ss.areas_name;

笔记:

  • 使用有意义的表别名(表名称的缩写(。
  • 切勿在FROM子句中使用逗号。
  • 始终使用正确、明确、标准、可读JOIN语法。
  • 您的查询缺少JOINON条件。
  • 列出GROUP BY中的所有未聚合列。

最新更新