2012-10-17 40 views
1

我有一个SQL查询,当前显示表HOTEL中的所有人预订了$ 260到$ 350之间的酒店。我使用的是ORACLE无法正确GROUP BY(SQL)

SELECT guest.guest_name "GUEST NAME", 
     Count(guest.guest_no), 
     guest.guest_no "GUEST   NUMBER", 
     room.r_price  "ROOM PRICE" 
FROM room, 
     guest, 
     booking 
WHERE r_price >= 260 
     AND r_price <= 350 
     AND guest.guest_no = booking.guest_no 
GROUP BY guest.guest_no, 
     guest.guest_name, 
     room.room_price 
ORDER BY guest.guest_name; 

我以为我可以通过组刚刚GUEST.GUEST_NAME(所以它把所有的下一个名字计的,而不是对房客的姓名翻倍)。

编辑:查询一下目前的结果是这样的:

GUEST NAME COUNT GUEST_NO R_PRICE 
    Jenny Freeman 2 G003 260 
    Jenny Freeman 2 G003 295 
    Jenny Freeman 2 G003 310 
    Martin Ferguson 3 G006 260 
    Martin Ferguson 3 G006 295 
    Martin Ferguson 3 G006 310 
    Paul Happy 3 G002 260 
    Paul Happy 3 G002 295 
    Paul Happy 3 G002 310 
    Steve Kirkwood 3 G005 260 
    Steve Kirkwood 3 G005 295 
    Steve Kirkwood 3 G005 310 
    Tina Duncan 2 G001 260 
    Tina Duncan 2 G001 295 
    Tina Duncan 2 G001 310 
    Vanessa Horton 1 G007 260 
    Vanessa Horton 1 G007 295 
    Vanessa Horton 1 G007 310 

但我希望是这样的:

GUEST NAME COUNT GUEST_NO R_PRICE 
    Jenny Freeman 6 G003 260 
    Martin Ferguson 9 G006 310 
    Paul Happy 9 G002 310 
    Steve Kirkwood 9 G005 260 
    Tina Duncan 6 G001 310 
    Vanessa Horton 3 G007 260 
+1

你似乎不在你的sql中预订和房间之间有一个链接。 – mcalex

+0

你想要什么输出?请告诉我们您想要查询的内容!然后我们可以告诉你,如果你的查询应该这样做,是否非常接近你想做的事,或者你是否完全处于错误的轨道上。 –

+0

你究竟在做什么?尝试将guest_no和room_price从选定字段中取出,guest_no取出。 – Andrew

回答

1

好吧,我想你只需要通过声明组以更改其余看起来不错给我。只是不包括房价格在集团By语句,我认为这是为您创造的问题,如果我是正确的得到您的问题...

GROUP BY GUEST.GUEST_NO, 
      GUEST.GUEST_NAME 

MAX(R_PRICE) 
+0

AHHH好像这样做!我不得不通过语句去除select和group中的room.r_price。我认为,因为我在房间里的两个值之间进行了指定。r_price,我必须在选择它,但它可以阅读它没有它在那里罚款。谢谢:) MAX(R_PRICE)是什么? –

+0

除了现在,当我有你/我写的所有我的结果是三倍,嗯 –

+0

,以防万一你想获得最大的r_price。 –

0

可能是你忘了加入由ROOM_NO预订房间(或其他领域)?
我已经从群组中删除了房间价格,现在查询将返回唯一的客人和他们预订的房间数量,并给定范围内的价格以及每位客人的最高价格。

SELECT 
    GUEST.GUEST_NAME "GUEST NAME", 
    GUEST.GUEST_NO "GUEST NUMBER", 
    COUNT(*) "CNT", 
    MAX(R.R_PRICE) "ROOM PRICE" 
FROM BOOKING B 
    inner join ROOM R on R.ROOM_NO = B.ROOM_NO 
    inner join GUEST G on G.GUEST_NO = B.GUEST_NO 
WHERE R.R_PRICE>=260 and R.R_PRICE<=350 
GROUP BY G.GUEST_NO, G.GUEST_NAME 
ORDER BY G.GUEST_NAME; 
+0

它说,“SQL命令没有正确结束”..嗯 –

+0

@danboy,我已经添加 ”;”最后。你没有指定你有oracle数据库。 –

+0

是的,我注意到它丢失了,但它仍然有相同的错误。感谢您的帮助到目前为止,我应该在 –

-2

你可以试试下面的SQL查询:

SELECT GUEST.GUEST_NAME "GUEST NAME", COUNT(GUEST.GUEST_NO), GUEST.GUEST_NO "GUEST NUMBER", ROOM.R_PRICE "ROOM PRICE" 
FROM ROOM, GUEST,BOOKING 
WHERE ROOM.R_PRICE>=260 
AND ROOM.R_PRICE<=350 
AND GUEST.GUEST_NO = BOOKING.GUEST_NO 
GROUP BY GUEST.GUEST_NAME 
ORDER BY GUEST.GUEST_NAME; 
+2

之前指定oracle请参见我尝试这样做时说的“不是GROUP BY表达式”,我理解的意思是(在研究它之后)我需要将所有选择语句包含在通过,我不知道为什么。 –

+0

对不起,我将查询更改为GROUP BY GUEST.GUEST_NAME 这会给你独特的客人名字 –

+1

它不起作用,你需要在GUEST_NO和R_PRICE上添加聚合或者将它添加到分组中,条款 –