2012-01-04 12 views
0

查詢計數行我有一個查詢是這樣的:含有加入

SELECT Product.local_price*Rate.exchange_rate AS 'US_price' FROM Product 
INNER JOIN Rate ON Rate.currency = Product.currency 
WHERE Product.type='TV' 
HAVING US_price BETWEEN 500 AND 600; 

我該怎麼做計數上的電視機滿足此查詢的號碼嗎?

表結構

  • 產品表:編號,類型,local_price
  • 率表:貨幣,EXCHANGE_RATE
+0

你爲什麼在這裏使用'HAVING'? – 2012-01-04 03:06:20

+0

你有其他建議嗎? – 2012-01-04 03:08:37

+0

我的意思是,這個查詢甚至工作? – 2012-01-04 03:10:33

回答

1

有沒有必要在這裏使用HAVING條款;它的特殊語義只有在你有GROUP BY條款時纔有意義。因此,我們可以簡單地將HAVING子句中的US_price替換爲生成它的表達式,並將其移入WHERE子句;然後,使用SELECT COUNT(*)

SELECT COUNT(*) 
    FROM Product 
    JOIN Rate 
    ON Rate.currency = Product.currency 
WHERE Product.type = 'TV' 
    AND Product.US_price * Rate.exchange_rate BETWEEN 500 AND 600 
; 

此外,作爲一般規則—沒有必要在這種情況下—您可以隨時(或幾乎總是?)包住整個查詢中SELECT COUNT(*) FROM (...) t獲得行的總數則返回。

+0

非常感謝。它工作完美。 – 2012-01-04 03:24:49

2

更換HAVING US_priceAND Product.local_price * Rate.exchange_rate,只是做了COUNT(Product.ID)SELECT子句中:

SELECT COUNT(Product.ID) 
FROM Product 
    INNER JOIN Rate ON Rate.currency = Product.currency 
WHERE Product.type='TV' 
    AND Product.local_price * Rate.exchange_rate BETWEEN 500 AND 600; 

你想使用HAVING,如果你想對彙總數據的標準,這樣的:

SELECT p.type, AVG(p.local_price) 
FROM Product p 
GROUP BY p.type 
HAVING AVG(p.local_price) > 50