查询的SQL帮助 - 分组依据和聚合函数

时间:2009-05-14 10:45:14

标签: sql sql-server

我有一个查询,我需要一些帮助,已经检查了一些公平的教程,但没有发现我发现这个问题。

我有三个连接表,产品,ProductImagesLookUp和Images。

产品可以包含任意数量的图像,产品图像的顺序存储在ProductImagesLookUp中。

我需要返回带有主图像的产品列表(具有最低订单值的产品)。

列表如下所示

Product
Images
LookUpId FileID Order    ProductTitle               Price   ProductId 
65       2     1    Amari Summer Party Dress    29.99      7
66       1     2    Amari Summer Party Dress    29.99      7
67       3     3    Amari Summer Party Dress    29.99      7
74       4     5    Beach Cover Up                  18.00     14
75       5     4    Beach Cover Up                  18.00     14
76       7     6    Beach Cover Up                  18.00     14
77       8     7    Beach Cover Up                  18.00     14
78       9     8    Beach Cover Up                  18.00     14
79       10    9    Amari Classic Party Dress   29.95     15
80       11    11   Amari Classic Party Dress   29.95     15
81       12    10   Amari Classic Party Dress   29.95     15

我希望我的查询能够撤回具有最低订单值的不同产品列表。 即它使用ProductImagesLookUpId为65(产品7),74(产品14)和79(产品15)来拉回行。

提前感谢您的帮助。这个真的让我把头发拉出来了!

1 个答案:

答案 0 :(得分:1)

SELECT
  l.LookupId,
  i.FileId,
  l.[Order],  
  p.ProductTitle,
  p.Price,
  p.ProductId 
FROM
  Products p
  INNER JOIN ProductImagesLookUp l ON l.ProductId = p.ProductId
  INNER JOIN Images i ON i.FileId = l.FileId
WHERE
  i.[Order] = (
    SELECT MIN([Order]) 
    FROM ProductImagesLookUp 
    WHERE ProductId = p.ProductId
  )

不需要分组或聚合任何内容,因为子查询可确保任何给定ProductId的结果行不超过一个 - Order最低的那一行。< / p>