这是我的疑问:
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")
列值。
答案 0 :(得分:2)
您可以使用子查询获取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子句,因此您可以使用别名,也可以将聚合放入其中。
按别名排序:
SELECT p.id, p.name, r.img, min(r.nu)MinNu 来自产品p 左连接p_images r 在p.id = r.product上 p.id组 由MinNu订购
按汇总排序:
SELECT p.id, p.name, r.img, min(r.nu)MinNu 来自产品p 左连接p_images r 在p.id = r.product上 p.id组 按分钟排序(r.nu);
请参阅两个查询的SQL Fiddle with Demo
结果是:
| ID | NAME | IMG | MINNU | ------------------------------ | 25 |鞋| a1.jpg | 0 | | 26 |榆树| r3.jpg | 1 |
击><击> 撞击>
答案 1 :(得分:1)
这是你需要的吗?这里错了,因为我把你早先产生的结果作为表格...:)
select id, name, img,
min(nu)
from t1
group by id
;
所以我不妨根据当时给出答案:
select x.id, x.name, x.img, min(x.nu)
from(
SELECT p.,r. FROM products p
left join p_images r
on (p.id=r.product)) x
group by x.id
order by x.nu
| ID | NAME | IMG | MIN(NU) |
--------------------------------
| 26 | elbs | r3.jpg | 1 |
| 25 | shoe | a1.jpg | 0 |
你的预期结果是r2.jpg and 0
,所以我认为这是你真正需要的......这次使用了正确的表格,感谢@bluefeet为他的sql小提琴。
select p.id, p.name, x.img, x.mn
from products p
left join (select i.product, i.img,
min(i.nu) mn
from p_images i
group by i.nu, i.product)
x on p.id = x.product
group by x.product
order by x.mn
;
| ID | NAME | IMG | MN |
---------------------------
| 25 | shoe | a2.jpg | 0 |
| 26 | elbs | r3.jpg | 1 |
答案 2 :(得分:1)
尝试:
SELECT *
FROM products p
LEFT JOIN p_images r ON (r.product=p.id)
WHERE r.nu = (SELECT MIN(nu) FROM p_images m WHERE m.product = p.id)
ORDER BY nu