0

为了更好地解释我需要什么,请查看下表:

ID --- image
A1 --- a1_01.jpg
A1 --- a1_02.jpg
B7 --- b7_01.jpg
B7 --- b7_02.jpg
D3 --- D3_04.jpg
D3 --- D3_99.jpg
... (From A to Z)
Z9 --- Z9_12.jpg
Z9 --- Z9_13.jpg
Z9 --- Z9_20.jpg
Z9 --- Z9_99.jpg
...and so on

我需要的结果是:

ID --- Image
A1 --- a1_01.jpg
B7 --- b7_01.jpg
D3 --- D3_04.jpg
...
Z9 --- Z9_12.jpg
...and so on

在 MS-Access 中,这可以通过SELECT ID, First(image) AS 'Image' FROM Photos

我怎样才能在 MYSQL 中做到这一点?

请记住,这是一个模型表,以说明我的问题。我有成吨成吨的记录。它不是一个(最小/最大)值!

===编辑:2012 年 11 月 24 日===
最终 SQL 代码:

SELECT ID, Min(image) AS 'Image' 
FROM Photos 
GROUP BY ID

谢谢@triclosan@iDevlop!!!

4

3 回答 3

2

如我所见

select ID, min(image)
from tbl
group by ID
于 2012-11-22T13:58:55.750 回答
1
SELECT ID, Min(image) AS 'Image' FROM mockup GROUP BY ID
于 2012-11-22T14:01:29.307 回答
0

如果第一个图像也是具有最小值的图像,并且最后一个图像也是具有最大值的图像,则此 MySql 查询将返回您想要的内容:

Select ID, min(image) as first_image, max(image) as last_image
From Tbl
Group By ID

否则,由于 MySql 没有first()last()聚合函数,你可以使用这样的东西:

Select
  Distinct ID,
  (select image from tbl a where a.ID = tbl.ID order by something ASC LIMIT 1) as first_image,
  (select image from tbl a where a.ID = tbl.ID order by something DESC LIMIT 1) as last_image,
From tbl

但请注意,您必须按某个字段对表格进行排序。如果您无法按某个字段对表格进行排序,则无法区分哪个值在前,哪个值在后。

我经常看到这个查询,看起来不错,应该返回第一个字段:

Select ID, image
From tbl
Group by ID

这是一个非标准的 Sql 查询,通常有效并且(几乎?)总是正确返回第一张图像。但是由于image不在group by子句中并且不与任何聚合函数相关联,服务器可以自由地返回任何值。它似乎总是返回第一个值,但不能保证,我不想使用它。

一些解释:

在您的示例中,最小值始终与第一个一致,因此无法从您的示例中判断您是在寻找最小值还是在寻找第一个。

假设这是您的数据:

ID  image
=============
A1  a1_02.jpg
A1  a1_01.jpg

如果您正在寻找最小值 ( A1, a1_01.jpg),min(image)这正是您所需要的,它会起作用!

但是如果你想得到A1, a1_02.jpg,在这个例子中是第一个......那么我们就有问题了。如果没有特定的 ORDER BY,行将以不可预测的方式返回。是的,它们经常/几乎总是按照它们在表空间中的物理顺序返回,但我们不能依赖这一点。

例如看这个问题和答案:

处理默认排序顺序的 SQL 最佳实践

这意味着如果我们不知道行是如何排序的,我们就无法分辨哪个是第一个,哪个是最后一个。例如,请参阅此查询:

Select
  Distinct ID,
 (select image from tbl a where a.ID = tbl.ID LIMIT 1) as first_image
From tbl

这可能会返回您正在寻找的内容。但由于我省略了 ORDER BY 子句,因此不能保证它总是有效。请注意,我还必须删除 last_image,因为没有办法告诉 MySql 按默认顺序 DESC 对表进行排序,因为这样的默认顺序不存在。

此查询可能还会返回第一张图片:

Select ID, image
From tbl
Group By ID

在标准 SQL 中,我们不能在 select 中引用非聚合列,但在 MySql 中是可能的。它可能会返回每个 ID 的第一张图片。但是让我们看看文档:

http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html

"The server is free to choose any value from each group, so unless they are the same, the values chosen are indeterminate." So the fact that the server almost always returns the first row is just coincidence, and it's not documented.

于 2012-11-22T18:13:50.403 回答