作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是 mySQL 产品表
+--------+-------+-----+
|Product | Price | Cat |
+--------+-------+-----+
| iPhone | 1 | 32 |
| Samsung| 2 | 32 |
| Dell | 1 | 21 |
| HP | 2 | 21 |
| RedMi | 3 | 32 |
| Acer | 3 | 21 |
+--------+-------+-----+
所需结果每个类别中最便宜的前 2 名:
+--------+-------+-----+
|Product | Price | Cat |
+--------+-------+-----+
| iPhone | 1 | 32 |
| Samsung| 2 | 32 |
| Dell | 1 | 21 |
| HP | 2 | 21 |
+--------+-------+-----+
我尝试从产品组中选择*按猫订单按价格
但它只返回第一个最便宜的价格产品。我需要前 2 个最便宜的。
最佳答案
您可以使用变量来获取每个类别的产品排名:
SET @rn := 0;
SET @cat := 0;
SELECT product, price, cat FROM (
SELECT @rn := case
WHEN @cat = cat then @rn + 1
ELSE 1
END AS rn, product, price, cat,
@cat := cat
FROM products
ORDER BY cat, price
) t
WHERE rn <= 2
ORDER BY cat, rn
请参阅demo .
对于 MySQL 8.0+,有 ROW_NUMBER()
:
SELECT product, price, cat
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY cat ORDER BY price) rn
FROM products
) t
WHERE rn <= 2
ORDER BY cat, rn
请参阅demo .
结果:
| product | price | cat |
| ------- | ----- | --- |
| Dell | 1 | 21 |
| HP | 2 | 21 |
| iPhone | 1 | 32 |
| Samsung | 2 | 32 |
关于MySQL 从每个类别中选择前 N 个最便宜的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58329968/
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
很难说出这里问的是什么。这个问题是模棱两可的、含糊的、不完整的、过于宽泛或修辞的,不能以其目前的形式得到合理的回答。如需帮助澄清此问题以便可以重新打开,visit the help center .
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我是一名优秀的程序员,十分优秀!