尝试创建视图时,select list的表达式#3不在group by子句中,并且包含未聚合的列

zbsbpyhn  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(338)

我试图从我的表中创建一个视图。当我从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.areas#name”,该列在功能上不依赖于group by子句中的列;这与sql\u mode=only\u full\u group by不兼容
我做错什么了?
如果你需要更多的信息,请告诉我。

nbysray5

nbysray51#

您的第一个查询可以工作,因为您正在按主键进行聚合。您显然在学习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 语法。
缺少您的查询 ON 项目的条件 JOIN .
列出列表中所有未聚合的列 GROUP BY .

相关问题