我想计算唯一的BOOKING_NUMBERS,以显示每个STAFF_ID旁边的总数;我正在使用以下声明:
SELECT c.Staff_Id , c.(COUNT Booking_Number) AS "Number of Lessons"
FROM AM_Lessons c JOIN AM_Staff m
ON (c.Staff_Id = m.Staff_Id)
ORDER BY c.Staff_Id
我收到以下错误,尽管所有列名和表都正确
ORA-01747:user.table.column,table.column或列规范无效
正确的语法是什么?
答案 0 :(得分:1)
你有c.COUNT(Booking_Number)
,但应该使用COUNT(c.Booking_Number)
,因为你需要计算一个元素,而不是查看" count"元素的属性。以下陈述应解决您的问题:
SELECT c.Staff_Id, COUNT(c.Booking_Number) AS "Number of Lessons"
FROM AM_Lessons c JOIN AM_Staff m ON (c.Staff_Id = m.Staff_Id)
GROUP BY c.Staff_ID ORDER BY c.Staff_Id
请注意,您需要按照您未计算的项目进行分组,如图所示。这是因为SELECT中的所有列也必须位于GROUP BY unless they are an aggregate。
中答案 1 :(得分:1)
在您的问题中,您已指定您正在寻找唯一的预订编号。在这种情况下,这是查询 -
SELECT c.Staff_Id, COUNT(DISTINCT c.Booking_Number) AS "Number of Lessons"
FROM AM_Lessons c JOIN AM_Staff m
ON (c.Staff_Id = m.Staff_Id)
GROUP BY c.Staff_ID
ORDER BY c.Staff_Id
答案 2 :(得分:0)
我认为这就是你想要的:
select
staff_id
, count(1) AS "Number of Lessons"
from (
SELECT
distinct c.Staff_Id,
c.Booking_Number
FROM AM_Lessons c JOIN AM_Staff m ON (c.Staff_Id = m.Staff_Id)
) a
group by staff_id
ORDER BY c.Staff_Id