2017-04-09 142 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