首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >price1 <> price2的多个限制

price1 <> price2的多个限制
EN

Stack Overflow用户
提问于 2021-02-07 11:08:28
回答 1查看 66关注 0票数 0

我正在使用mysql和php。

假设我的数据库中有400.000多本书,如下表所示:

代码语言:javascript
运行
复制
+------+-------+--------+--------+
| Item | color | Price1 | Price2 |
+------+-------+--------+--------+
|    1 | blue  |   1.23 |   1.23 |
|    2 | red   |   2.34 |   2.66 |
|    3 | green |   4.55 |   4.55 |
|    4 | blue  |   2.33 |   2.44 |
|    5 | blue  |   3.44 |   3.66 |
|    6 | blue  |   4.55 |   4.66 |
|    7 | ...   |    ... |    ... |
+------+-------+--------+--------+

我想得到每个颜色的前5个条目,其中price1 <> price2。如果受影响的行小于5 ==>,那么我希望得到包含price1==price2的条目的查询。

如果出现“蓝色”,我想得到以下结果:

代码语言:javascript
运行
复制
+------+-------+--------+--------+
| Item | color | Price1 | Price2 |
+------+-------+--------+--------+
|    4 | blue  |   2.33 |   2.44 |
|    5 | blue  |   3.44 |   3.66 |
|    6 | blue  |   4.55 |   4.66 |
|    1 | blue  |   1.23 |   1.23 |
+------+-------+--------+--------+

我有个小办法可以做这个:

代码语言:javascript
运行
复制
SELECT * FROM books WHERE color = 'blue' AND price1<>price2 ORDER BY price1 LIMIT 5;

获取受影响的行。在本例中: 3.启动另一个查询:

代码语言:javascript
运行
复制
SELECT * FROM books WHERE color = 'blue' price1=price2 ORDER BY price1 LIMIT 2;
//Limit 2, because I ve already 3 rows from the first result.

有办法合并这个查询吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-07 11:22:59

您可以对每种颜色的行进行排序,以便首先显示带有price1 <> price2的行。

可以使用ROW_NUMBER()窗口函数实现此条件排序:

代码语言:javascript
运行
复制
SELECT t.Item, t.color, t.Price1, t.Price2  
FROM (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY color ORDER BY price1 <> price2 DESC, price1) rn
  FROM books 
) t
WHERE t.rn <= 5

如果您想要特定颜色的结果:

代码语言:javascript
运行
复制
SELECT *
FROM books 
WHERE color = 'blue'
ORDER BY price1 <> price2 DESC, price1
LIMIT 5
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66087180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档