mysql - 按有序列分组

标签 mysql group-by

这是我的查询:

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;

参见 SQL Fiddle with Demo

结果:

| 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/

相关文章:

mysql - 计算两个表中两个不同列之和的差值

mysql - 外部约束键失败

MYSQL 每10分钟获取一列的平均值

mysql - 选择给定日期范围内的所有月份,包括具有 0 值的月份

ruby - 续集:如何使用分组和计数

mysql - 如何在MySQL中通过查询从每个帖子的照片表中选择一张照片

mysql 从具有 where 条件的 View 中选择给出的结果与使用 where 条件执行 View 定义的结果不同

mysql - 需要有关 SQL 查询的帮助

python - Pandas stack/groupby 制作一个新的数据框

python - 创建数据框分组的切片