-1

我很欣赏这在许多人看来可能是一个愚蠢的问题,但我无法在任何地方找到关于“分组依据”对 SQL 语句中的 select max(...) 的影响的明确解释。

我有以下数据(还有另一个未显示的 mediumblob 类型的列图像):

id  title                      test_id 

1  bomb                             0 
2  Soft watch                       2 
3  Dali                             1 
4  Narciss                          1 
5  The Woman In Green               0 
6  A summer in Vetheuil             0 
7  Artist's Garden                  2 
8  Beech Forest                     2 
9  Claude Monet                     0 

我知道我是否表演

select max(id) from images 
where image is not null; 

我得到 id 的最大值,即:

max(id) 

9

但是有人可以解释一下我表演时发生了什么

select max(id), title, test_id 
from images 
where image is not null 
group by id; 

我发现 max(id) 没有用处(结果如下所示)?

  max(id)  title                      test_id 

  1  bomb                              0 
  2  Soft watch                        2 
  3  Dali                              1 
  4  Narciss                           1 
  5  The Woman In Green                0 
  6  A summer in Vetheuil              0 
  7  Artist's Garden                   2 
  8  Beech Forest                      2 
  9  Claude Monet                      0 
4

3 回答 3

1

在使用子句的情况下,MAX()本质GROUP BY上是告诉查询引擎如何对项目进行分组,从中确定最大值。在您的第一个示例中,您只选择了一个列,因此不需要分组。但是在您的第二个示例中,您有多个列。因此,您需要告诉查询引擎如何确定要比较哪些以找到最大值。

你告诉它按id列分组。这意味着它将比较具有相同记录的记录,id并为每个唯一的记录提供最大的记录id。由于每条记录都有不同的id,因此您基本上没有对该子句做任何事情。

id它用of将所有记录分组1(这是一条记录),并返回该id组中具有最大值的记录(即该记录)。它对 , 等做同样的2事情3

对于此处显示的三列,唯一可以对记录进行分组的地方是test_id列上。像这样的东西:

SELECT MAX(id), title, test_id
FROM images
WHERE image IS NOT null 
GROUP BY test_id

这将按 对它们进行分组test_id,因此结果将包括记录 6(0 的最大值idtest_id、4(1 的最大值idtest_id和 8(2 的最大值idtest_id。通过根据列中的三个唯一值将记录分成这三个组test_id,它可以有效地找到id每个组内的“最大值”。

于 2012-05-21T18:56:40.450 回答
0

是的,在您的示例中,它没有任何用处。

您按 ID 分组,然后找到最大 ID。但这没有意义,因为每个 ID 只有一个。通常 MAX() 用于数量,例如价格或商品数量等。

于 2012-05-21T18:54:20.857 回答
0

Group by 不用于这种查询 它用于这样的查询

OId OrderDate   OrderPrice  Customer

1   2008/11/12  1000    Hansen

2   2008/10/23  1600    Nilsen

3   2008/09/02  700 Hansen

4   2008/09/03  300 Hansen

5   2008/08/30  2000    Jensen

6   2008/10/04  100 Nilsen

现在,如果您想获得每个客户购买的材料总和,您将使用 group by

SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer

customer    SUM(OrderPrice)

Hansen  2000

Nilsen  1700

Jensen  2000

在上述情况下,id 是唯一的,因此按 id 分组将没有任何意义

于 2012-05-21T18:54:22.727 回答