2015-04-12 102 views
0

下面是我想要做的事情的描述: 查看每个活动房产的房产名称,“房间数量”,“最优每日价值”和“平均房价”(最佳每日价值假定所有。房间满了,他们的基准利率收取)在SQL中你如何乘以count()?

这里是我想出了srcipt,但它不工作,给出了一个错误:

SELECT p.property_name, 'numrooms' AS 'Number of Rooms', 
    'numrooms' * r.base_rate AS 'Optimal Daily Value', 
    AVG(r.base_rate) AS 'Average Rate' 
FROM property p, room r,(SELECT COUNT(DISTINCT room_id) FROM room AS "numrooms" 
    GROUP BY p.property_name; 
+1

''numrooms''是一个字符串文字。 'numrooms'是一个标识符/列别名。 – Mat

+0

请在“不工作”部分添加更多信息。你不希望它返回的结果是什么? – dasblinkenlight

+2

'AS'房间数''无效(标准)SQL。标识符需要用双引号,而不是单引号 –

回答

1

我猜对了一些列名。

SELECT p.property_name, 
COUNT(1) AS [Number of Rooms], 
SUM(r.base_rate) AS [Optimal Daily Value], 
AVG(r.base_rate) AS [Average Rate] 
FROM property p 
INNER JOIN room r 
ON p.id = r.propertyId 
GROUP BY p.property_name 
ORDER BY p.property_name 

根据您的SQL品牌,列别名可能必须有所不同。

0

根据您所提供的细节,我相信像这样的东西可能会接近你实际寻找的东西,但我不确定你可以理解你的查询产生的数据:

SELECT 
    p.property_name 
    , numrooms.rooms AS [Number of Rooms] 
    , numrooms.rooms * r.base_rate AS [Optimal Daily Value] 
    , AVG(r.base_rate) AS [Average Rate] 
FROM property p 
    , room r 
    , (SELECT COUNT(DISTINCT room_id) AS rooms FROM room GROUP BY p.property_name) numrooms 

但我的建议是发布更多细节,什么都在房间和属性表的主键/外键,以便将carthesian加入正在通过枚举表完成后FROM可以更有效JOIN被替换秒。