请教一条非常难的sql查询,试试你的数据库编写水平

首先声明必须用一条sql查询写出来,分开写的不能算

数据库:mssql2000
如果下面有三个表,
一个是酒店表 (hotel)
id
HotelName 酒店名
HotelCity 酒店所在城市
......一些酒店基本信息

一个是酒店房间价格表 (hotelprice)

id
HouseName 房间名
HousePrice 价格
HotelName 酒店名称

一个酒店的图片(hotelpic)
id
HousePic 图片地址
HotelName 酒店名称

查询出某个城市所有的酒店信息及酒店的最低价,最高价,每个酒店的图片数目,及酒店最低价在200-300之间以及整个城市酒店的最低价

要求必须用一条sql写出,写多条语句不算,谢谢大家
不查整个城市的最低价也可以,关键就是酒店信息和酒店的最低价最高价以及酒店最低价在200-300之间这个条件不会弄

--200到300间
Select max(hotelprice),min(hotelprice),count(housePic),* From hotelprice
inner join hotel on hotle.hotelname = hotelprice.hotelname
inner join hotel on hotelpic.hotelname = hotelprice.hotelname
where houseprice between 200 and 300
group by hotel.hotelname

声明一下,以上是一句,仅仅是换行写 好看些

利用分组查询原理,以酒店名分组,这样可按酒店名分类,找出各酒店内最高价,最低价在200-300这间。

未经测试,但原理一定正确。
最大值、最小值、计数、连接查询、分组查询都用上了。

使用分组查询的原因:
max\min\count等均为聚合函数,要和其他信息一齐显示,并要按酒店分类,只能使用分组查询。

但个人认为,这个数据库三个表的设计是有问题的。
首先,这三个表只能通过酒店名称来连接。而id应该为标识列,主键,这样的话,三个表无法建立主外键关系。
其次,没有主外键关系的话,如何确保添加一个酒店的图片信息,确保酒店信息也有??主表数据都没有的话,这条数据以后就冗余数据了。
还有,你要统计的酒店价格、图片等信息应该使用非空约束。否则统计数据就会出错。

最后。没有必要把SQL写成一句,多句的话可写的简单得多,还可以利用视图、临时表等手段来实现。多句SQL,可由存储过程来调用。而且效率要比单句直接调用要高。(非多次查询或非建立临时表的情况下)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-08-22
楼住意思是:
select 酒店信息,酒店的最低价,最高价,每个酒店的图片数目,酒店最低价在200-300之间,整个城市酒店的最低价

这样的样式吗??
第2个回答  2008-08-22
楼上正解
跟我想到一块去了,刚装好ORACLE 10G 很晚了
明天测试,看看能不能解答哈哈
第3个回答  2008-08-22
同意楼上的楼上的 ... 你的表设计得太不合理了... 建议先想个好点的表格模式 对于代码的书写会更具逻辑性
第4个回答  2008-08-22
查询出某个城市所有的酒店信息
整个城市酒店的最低价

什么逻辑啊????
悖论!
相似回答