SQL计数和连接语句

时间:2014-06-02 18:24:08

标签: sql oracle

我想计算唯一的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或列规范无效

正确的语法是什么?

3 个答案:

答案 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