这是我的查询:
SELECT p.*,r.*
FROM products p
left join p_images r
on (p.id=r.product)
结果:
id | name | img | nu
25 | shoe | a1.jpg | 1
25 | shoe | a2.jpg | 0
26 | elbs | r3.jpg | 1
我想要这个结果
shoe a2.jpg 0
elbs r3.jpg 1
当我在查询中使用 group by p.id
时,它输出 a1.jpg
。
我想使用 min("nu")
列值进行排序。
最佳答案
您可以使用子查询来获取 min(nu)
值,然后将其加入到您的 p_image
中表以确保您返回正确的图像:
select p.id,
p.name,
i.img,
r.minnu
from products p
left join
(
select min(nu) MinNu, product
from p_images
group by product
) r
on p.id=r.product
left join p_images i
on r.minnu = i.nu
and r.product = i.product
order by i.nu;
结果:
| ID | NAME | IMG | MINNU |
------------------------------
| 25 | shoe | a2.jpg | 0 |
| 26 | elbs | r3.jpg | 1 |
你可以添加一个ORDER BY
那个值。由于您使用的是 order by 子句,因此您可以使用别名,也可以将聚合放在其中。
按别名排序:
选择 p.id, p.name, r.img, min(r.nu) MinNu FROM 产品 p 左加入 p_images r 在 p.id=r.product 按 p.id 分组 MinNu订购
按聚合排序:
选择 p.id, p.name, r.img, min(r.nu) MinNu FROM 产品 p 左加入 p_images r 在 p.id=r.product 按 p.id 分组 按 min(r.nu) 排序;
参见 SQL Fiddle with Demo两个查询的
结果是:
|编号 |姓名 |图像 |民努 | ------------------------------ | 25 |鞋子 | a1.jpg | 0 | | 26 | elbs | r3.jpg | 1 |
罢工><罢工>罢工>
关于mysql - 按有序列分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14396418/