我很欣赏这可能在许多人看来是一个dum问题,但我无法在任何地方找到关于“group by”对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
答案 0 :(得分:1)
在使用MAX()
的情况下,GROUP BY
子句基本上告诉查询引擎如何对项目进行分组以确定最大值。在您的第一个示例中,您只选择了一个列,因此无需进行分组。但是在你的第二个例子中,你有多列。因此,您需要告诉查询引擎如何确定要比较哪些内容以找到最大值。
您告诉它按id
列进行分组。这意味着它将比较具有相同id
的记录,并为每个唯一id
提供最大值。{由于每条记录都有不同的id
,因此您基本上没有对该子句做任何事情。
它使用id
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(id
0的最大test_id
),4(id
的最大值test_id
{1}} 1)和8(id
2的最大test_id
)。通过根据test_id
列中的三个唯一值将记录拆分为这三个组,可以有效地在每个组中找到“最大”id
。
答案 1 :(得分:0)
是的,在你的例子中它没有任何用处。
您按ID进行分组,然后找到最大ID。但这没有意义,因为每个ID只有一个。通常MAX()用于数量,如价格或项目数等。
答案 2 :(得分:0)
分组依据不用于此类查询 它用于这样的查询
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
现在,如果您想获得每个客户购买的材料总和,您将使用
分组SELECT Customer,SUM(OrderPrice)FROM Orders GROUP BY客户
customer SUM(OrderPrice)
Hansen 2000
Nilsen 1700
Jensen 2000
在上面的情况下,ID是唯一的,因此按ID分组将没有任何意义