2017-04-09 197 views
0

我新的SQL,和我仍然在試圖瞭解基本的東西,所以我有哪些產品的價格比較互聯網上的應用程序的這個數據庫:SQL Server查詢分析

  • 產品(P_ID ,p_name,p_description,CATEGORY_ID,CATEGORY_NAME,manuf_id,manuf_name)
  • Product_attributes(P_ID,屬性名稱,屬性名稱)
  • 地盤(SITE_ID,SITE_NAME,SITE_URL)
  • ProductPrice(P_ID,SITE_ID,FROM_DATE,TO_DATE,價格, product_site_url)

與此查詢:

SELECT 
    MAX(p1.price - p2.price) 
FROM 
    ProdcutPrice p1 
JOIN 
    ProdcutPrice p2 ON p1.p_id = p2.p_id AND p1.site_id <> p2.site_id 
WHERE 
    p1.p_id = 18 AND to_date IS NULL 

現在,我試圖瞭解這是否查詢做,我有一個很難理解的MAX功能,就我所知,它應該返回最大所選列的值。和語法應該是

SELECT MAX(column_name) 
FROM table_name; 

也做了JOIN條款工作像INNER JOIN

回答

0

MAX(expression)在所有找到的記錄中找到最大表達式值(由WHERE過濾)。注意:如果您未指定GROUP BY,則在所有記錄中。

JOIN默認情況下沒有任何附加字詞是INNER JOIN

樣品:

ProductPrice

p_id | site_id | price 
-----|---------|------ 
18 | 1  | 10 
18 | 2  | 5 
18 | 3  | 7 

查詢

p1.p_id | p1.site_id | p1.price | p2.p_id | p2.site_id | p2.price | p1.price-p2.price 
--------|------------|----------|----- ---|------------|----------|------------------ 
18  | 1   | 10  | 18  | 2   | 5  | 5 (max) 
18  | 1   | 10  | 18  | 3   | 7  | 3 
18  | 2   | 5  | 18  | 1   | 10  | -5 
18  | 2   | 5  | 18  | 3   | 7  | -2 
18  | 3   | 7  | 18  | 1   | 10  | -3 
18  | 3   | 7  | 18  | 2   | 5  | 2 
0

事實上JOIN相當於INNER JOIN

如果運行不MAX()聚合函數像這樣的查詢:

SELECT p1.price - p2.price 
FROM ... 

,你會看到它返回一個列。因此,將聚合應用於此列是完全合法的,例如MAXSUM