我需要从表中选择所有的vip并按兰德排序,然后添加按日期排序的其他数据。在第一个子查询中,一切正常,但在第二个子查询中,spa_date DESC不起作用。我知道UNION子查询中的ORDER BY子句会被忽略而没有限制(但ORDER BY rand()起作用),但我需要所有查询(1+2)中的限制,而不是子查询中的限制
SELECT * FROM
(
select *,DATE_FORMAT(spa_date,"%e %M %Y") as spa_date_out
from spa join city using (city_id)
where spa_vip=1
order by RAND()
) as A
UNION
(
select *,DATE_FORMAT(spa_date,"%e %M %Y") as spa_date_out
from spa join city using (city_id)
where spa_vip=0
order by spa_date DESC )
limit 10,10
问题:
我需要选择spa_vip=1的所有spa_id并按RAND()排序,然后我需要选择spa_vip=0的所有spa_id并按spa_date排序,合并这2个子查询并为页面视图选择限制为0、10的数据,以此类推
我不确定这些回答了你的问题,因为我没有看到有人问任何问题。
如果你在问“为什么我在观察这种行为?”这个问题,请看下面我的回答。
如果您在问:“我需要对我的语句做哪些更改,以便MySQL以特定顺序返回行?”,也请参阅下面我的回答。
如果您问,“我需要运行的确切语句是什么?”,我们实际上只是猜测,因为不清楚您希望返回的行的顺序,没有明确的规范或描述,没有示例数据或示例输出,也没有应该首先返回哪些行的原理。
MySQL可以自由地以它选择的任何顺序返回行,因为在最外面的查询上没有order by
子句。(MySQL实际上可以忽略内联视图查询中的order by
子句,并在ANSI SQL标准的规范范围内。)
若要确保查询返回的行将以特定顺序返回,请在外部查询的limit
子句之前添加order by
子句。
请注意,union
set运算符要求MySQL检查组合集中的“重复”行,并删除任何重复行。
如果您不需要执行该操作,则可以使用UNION ALL
set运算符来代替UNION
。
在MySQL中,还可以省略语句开头的select*from
。
我可以提供“试试这个”示例SQL,但由于不知道实际希望返回的行的顺序,我们只是猜测。)
下面是我对一个查询的猜测,该查询按照您所期望的“顺序”返回行。
我将使用UNION ALL
集运算符来显示这一点:
(
SELECT *,DATE_FORMAT(spa_date,"%e %M %Y") as spa_date_out
FROM spa
JOIN city USING (city_id)
WHERE spa_vip=1
)
UNION ALL
(
SELECT *,DATE_FORMAT(spa_date,"%e %M %Y") as spa_date_out
FROM spa
JOIN city USING (city_id)
WHERE spa_vip=0
)
ORDER
BY spa_vip DESC
, IF(spa_vip=1,RAND(),0)
, IF(spa_vip=0,spa_date,NULL) DESC
LIMIT 10,10
让我们把它拆开一点。有两个查询返回行,UNION ALL
set运算符将这两个集合合并为一个集合。(如果使用union
set运算符的目的是删除重复项,则可以通过将此查询中的unionall
替换为union
来恢复该行为。)
order by
子句spa_vip
中的第一个表达式首先获取第一个集合中的行...我们保证第一个查询返回的所有行的spa_vip值为1,第二个查询返回的所有行的值为0。
第二个表达式为来自第一个查询的行返回rand()
,为来自第二个查询的行返回一个常量。
第三个表达式为第一个查询中的所有行返回一个常量,为第二个查询中的行返回一个来自行的值。
如果这是您期望返回的结果,那么同样的结果也可以通过如下语句返回:
SELECT *,DATE_FORMAT(spa_date,"%e %M %Y") as spa_date_out
FROM spa
JOIN city USING (city_id)
WHERE spa_vip IN (0,1)
ORDER
BY spa_vip DESC
, IF(spa_vip=1,RAND(),0)
, IF(spa_vip=0,spa_date,NULL) DESC
LIMIT 10,10
本文向大家介绍如何对MySQL联合查询计数?,包括了如何对MySQL联合查询计数?的使用技巧和注意事项,需要的朋友参考一下 要对联合进行计数,即获取UNION结果的计数,请使用以下语法- 为了理解上述语法,让我们创建两个带有一些记录的表。创建表的查询如下- 使用insert命令在表中插入一些记录。查询如下- 使用select语句显示表中的所有记录。查询如下- 以下是输出- 该查询创建第二个表。 使
问题内容: 我想用UNION和limit进行查询。 我可以在mysql上解释该查询。 我在Elasticsearch上尝试过 http:// localhost:9200 / test / table / _search?pretty&source = {%22query%22:{%22dis_max%22:{%22queries%22:[{%22query%22:{%22match%22:{%2
问题内容: 我在MySQL表中有一个列,其类型是,而另一列是类型。 我想按以下顺序获取所有表行: 首先排,按 最后一行,排序方式 在中间的所有其他行中,按 可以在1个查询中进行这种排序吗? 问题答案: 使用:
问题内容: 我在SQLAlchemy中找不到此简单查询的解决方案示例。SQLAlchemy可以替换T-SQL ETL数据吗? 我将此连接用于Windows身份验证: 问题答案: 您需要的是多部分架构名称。如果您使用的是声明式,则可以使用并使用它来执行查询。由于您省略了表或模型定义,因此我将根据您的查询示例生成示例:
有人知道为什么repository方法没有按照预期工作吗?多谢了。
flink流有多个数据流,然后我将这些数据流与org合并。阿帕奇。Flink。流式处理。api。数据流。DataStream#联合方法。然后,我得到了问题,数据流是无序的,我不能设置窗口来排序数据流中的数据。 在Apache Flink中对流的联合进行排序以识别用户会话 我得到了答案,但是com。利亚姆。学Flink。实例协会UnionStreamDemo。从未调用SortFunction#onT