SELECT p.id AS id, p.fullName AS fullName, p.gender AS gender, p.organizationID AS organizationID, o.ORGNAME AS organizationName, p.mobile AS mobile, WM_CONCAT( j.sworkPlaceName ) AS sworkplaceName FROM base_personfile_person p LEFT JOIN sys_org o ON o.ORGID = p.organizationID LEFT JOIN base_personfile_person_sjob pj ON pj.personId = p.id LEFT JOIN base_personfile_sjob j ON j.ID = pj.sjobId WHERE 1=1 GROUP BY p.id 报不是GROUP BY 表达式
时间: 2024-01-21 18:19:11 浏览: 63
这个错误通常是因为 SELECT 语句中的列与 GROUP BY 子句不匹配。在这种情况下,查询引擎无法确定每个组中应该显示哪些值。
在你的查询中,你使用了 WM_CONCAT 函数来聚合 sworkPlaceName 列,但是你没有在 GROUP BY 子句中包括该列。为了解决这个问题,你需要将 sworkPlaceName 列添加到 GROUP BY 子句中,像这样:
```
SELECT p.id AS id, p.fullName AS fullName, p.gender AS gender, p.organizationID AS organizationID, o.ORGNAME AS organizationName, p.mobile AS mobile, WM_CONCAT(j.sworkPlaceName) AS sworkplaceName
FROM base_personfile_person p
LEFT JOIN sys_org o ON o.ORGID = p.organizationID
LEFT JOIN base_personfile_person_sjob pj ON pj.personId = p.id
LEFT JOIN base_personfile_sjob j ON j.ID = pj.sjobId
GROUP BY p.id, p.fullName, p.gender, p.organizationID, o.ORGNAME, p.mobile
```
这应该会解决你遇到的问题。
相关问题
select a. id as 非业务主键, a.created_at as 创建时间, a.update_at as 更新时间, a.attend as 是否上课, a.paid as 重修费是否支付, a.turn as 选课轮次, b.name as 修读类别, c.name as 选课方式, d.fullname as 教学任务班, e.code as 学号, f.name as 课程名称, g.school as 学年度, g.season as 开课季 from ods.ods_t_jw_t_course_takes a left join ods.ods_t_jw_hb_course_take_types b on a.course_take_type_id=b.id, left join ods.ods_t_jw_hb_election_modes c on a.election_mode_id=c.id, left join ods.ods_t_jw_t_lessons d on a.lesson_id=d.id, left join ods.ods_t_jw_c_students e on a. std_id=e.id, left join ods.ods_t_jw_t_courses f on a.course_id=f.id, left join ods.ods_t_jw_c_semesters g on a.semester_id=g.id;
这是一个SQL语句,包含了多个表的连接操作。具体来说,这个SQL语句从名为ods_t_jw_t_course_takes的表中查询数据,并将该表与其他6个表进行了左连接操作。连接的条件包括多个列名和表名。
这个SQL语句的目的是查询学生选课信息,并将不同表中的字段组合在一起。其中,a.id、a.created_at、a.update_at、a.attend、a.paid、a.turn、b.name、c.name、d.fullname、e.code、f.name、g.school和g.season分别代表不同的字段,可以根据需要进行调整和筛选。
需要注意的是,在这个SQL语句中,有一个逗号在left join ods.ods_t_jw_hb_course_take_types b on a.course_take_type_id=b.id之后,需要将其删除,否则会导致语法错误。正确的写法是:
```
select a.id as 非业务主键, a.created_at as 创建时间, a.update_at as 更新时间, a.attend as 是否上课, a.paid as 重修费是否支付, a.turn as 选课轮次, b.name as 修读类别, c.name as 选课方式, d.fullname as 教学任务班, e.code as 学号, f.name as 课程名称, g.school as 学年度, g.season as 开课季
from ods.ods_t_jw_t_course_takes a
left join ods.ods_t_jw_hb_course_take_types b on a.course_take_type_id=b.id
left join ods.ods_t_jw_hb_election_modes c on a.election_mode_id=c.id
left join ods.ods_t_jw_t_lessons d on a.lesson_id=d.id
left join ods.ods_t_jw_c_students e on a.std_id=e.id
left join ods.ods_t_jw_t_courses f on a.course_id=f.id
left join ods.ods_t_jw_c_semesters g on a.semester_id=g.id;
```
这样就可以正确执行该SQL语句,查询所需的结果。
SELECT person.fullname FROM person WHERE - NOTEXISTS( - SELECT - * - FROM - location - WHERE NOTEXISTS(SELECT*FROMitineraryWHEREitinerary.p_id=person.idANDitinerary.loc_id=location.id)) ORDERBY person.fullname;
这是一条可以实现查询人员表去过所有地点的人员姓名,查询结果按人员姓名顺序排序的 SQL 查询语句。以下是格式化后的代码:
```
SELECT person.fullname
FROM person
WHERE NOT EXISTS (
SELECT *
FROM location
WHERE NOT EXISTS (
SELECT *
FROM itinerary
WHERE itinerary.p_id = person.id AND itinerary.loc_id = location.id
)
)
ORDER BY person.fullname;
```
该查询语句使用了两个嵌套的 `NOT EXISTS` 子查询,第一个子查询用于找到去过所有地点的人员,第二个子查询用于在去过所有地点的人员中筛选出去过每个地点的人员。同时使用了 `JOIN` 操作,将 `person`、`location` 和 `itinerary` 表连接起来。最后使用 `ORDER BY` 子句按照人员姓名排序。
阅读全文