Sql server SQL Server查询分析
我是SQL新手,我仍在努力理解基本知识,因此我有一个应用程序数据库,用于比较互联网上的产品价格:Sql server SQL Server查询分析,sql-server,join,Sql Server,Join,我是SQL新手,我仍在努力理解基本知识,因此我有一个应用程序数据库,用于比较互联网上的产品价格: 产品(产品标识、产品名称、产品描述、类别标识、类别名称、生产标识、生产名称) 产品属性(p\U id、属性名称、属性名称) 站点(站点id、站点名称、站点url) ProductPrice(p_id、站点id、起始日期、截止日期、价格、产品站点url) 此查询: SELECT MAX(p1.price - p2.price) FROM ProdcutPrice p1 JOI
- 产品(产品标识、产品名称、产品描述、类别标识、类别名称、生产标识、生产名称)
- 产品属性(p\U id、属性名称、属性名称)
- 站点(站点id、站点名称、站点url)
- ProductPrice(p_id、站点id、起始日期、截止日期、价格、产品站点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
JOIN
子句的工作方式是否与internaljoin
类似?MAX(expression)
在所有找到的记录中查找表达式的最大值(按WHERE
过滤)。注意:如果未指定分组依据
,则在所有记录中
JOIN
默认情况下,没有任何附加单词的是内部JOIN
样本:
产品价格:
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
查询:
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
实际上,JOIN
相当于internaljoin
如果在不使用MAX()
aggregate函数的情况下运行查询,如下所示:
SELECT p1.price - p2.price
FROM ...
您将看到它返回一列。因此,对该列应用聚合是完全合法的,例如MAX
或SUM