SELECT `id`,`username`,`mobile`,`time`,id AS leader
FROM `grouporder_leader`
WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1
UNION ALL
SELECT leadorderid,username,mobile,time,null
FROM `grouporder_partner`
WHERE courseid=21 and status=1 and merchid=23
结果如下
SELECT `id`,`username`,`mobile`,`time`,id AS leader
FROM `grouporder_leader`
WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1
ORDER BY time DESC
UNION ALL
SELECT leadorderid,username,mobile,time,null
FROM `grouporder_partner`
WHERE courseid=21 and status=1 and merchid=23
ORDER BY time DESC
执行这条SQL语句之后就报错。
3.创建临时表
使用类似于创建临时表的方法保存查询结果,然后对临时表进行查询排序。
SELECT id,username,mobile,time,leader
FROM (SELECT `id`,`username`,`mobile`,`time`,id AS leader
FROM `grouporder_leader` WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1
UNION ALL
SELECT leadorderid,username,mobile,time,null
FROM `grouporder_partner` WHERE courseid=21 and status=1 and merchid=23
ORDER BY time DESC
4.起别名
不知道为什么第3步中查询依旧没有,然后对UNION查询的结果起个别名,然后再查询排序就没问题了。
SELECT a.id,a.username,a.mobile,a.time,a.leader
FROM (SELECT `id`,`username`,`mobile`,`time`,id AS leader
FROM `grouporder_leader` WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1
UNION ALL
SELECT leadorderid,username,mobile,time,null
FROM `grouporder_partner` WHERE courseid=21 and status=1 and merchid=23
) AS a
ORDER BY time DESC
结果就正确了
查出来就好说了,再进行去重或者其他操作,也没问题.
SELECT DISTINCT a.id,a.username,a.mobile,FROM_UNIXTIME(a.time,'%Y/%m/%d') as _time,a.leader
FROM (SELECT `id`,`username`,`mobile`,`time`,id AS leader
FROM `grouporder_leader` WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1
UNION ALL
SELECT leadorderid,username,mobile,time,null
FROM `grouporder_partner` WHERE courseid=21 and status=1 and merchid=23
) AS a
ORDER BY time DESC
项目中有时候因为某些不可逆转的原因使得表中存储的数据难以满足在页面中的展示要求。之前的项目上有文章内容的展示功能,文章分为三个状态待发布、已发布、已下线。
他们在数据表中判断状态的字段(PROMOTE_STATUS)值分别为0、1、2。一开始的需求是文章只展示待发布和已发布,已发布排在待发布前面,并且两种状态下在根据自己的情况去
排序
。这样的实现比较简单,如下的order by语句就可以实现了。
order by PROMOTE_STATUS desc ,SEQUENCE_ID desc……
结果移交测试之后,产品觉得这里可以优化下,文章的展示要改为已发布、待发布、已下线(没错,已下线它突然就要
在实际的查询过程中我们时常会有这样的需求:某一类数据很重要要排在前面,其他数据排在后面,默认安装创建时间或者其他字段进行
排序
,这时候最好的办法就是用
union
将查询到的两个数据集进行组合
排序
,添加一个伪列对分组进行组外
排序
,
sql
如下:
select * from(
SELECT *,1 as 'sort' FROM sakila.film where rating='G'
union
sel...
今天在开发一个存储过程的是遇到一个
问题
,Oracle
数据库
多超过2个表使用
union
all 查询结果进行
排序
时报
排序
字段无效。经一番周折终于解决了
问题
,在此分享一下解决方法。
3张
数据库
表:t1,t2,t3
t1表字段id,name,sex
t2表字段no,name,sex
t3表字段sno,name,grad
2表查询语句:select id,name,sex from (selec...
select '销售订单审批' as order_type, '待审批' as status,currency,audit_datewhere supervise = '已送审'
union
all select '采购订单审批' as order_type, '待审批' as status,where o.supervise = '已送审' order by order_number。
1 使用
union
的时候会报错:Incoreect usage of
union
and Order by (不正确的使用
union
和order by)
2 解决上述
问题
的办法:
(1) 在语句的最后添加order by关键字
例如 select * from t1
union
select * from t2
order by 字段
(2) 如果想要对未
union
前两个
sql
语句的查询结果进行
排序
的话要使用如下的方法:
select * from(
select * from t1
order by 字
SQL
用了
Union
后
排序
应该怎么实现
最近使用
SQL
语句进行
UNION
查询,惊奇的发现:
SQL
没
问题
,
UNION
查询也没
问题
,都可以得到想要的结果,可是在对结果进行
排序
的时候,却出
问题
了。
日常开发中,如果实用
UNION
ALL合并两个已经排好序的结果集的时候,需求是第二个结果集数据排在第一个结果集数据下面,单纯的实用order by是无效的,因为order by的优先级比
UNION
ALL低。
1.
UNION
查询没
问题
SELECT `id`,`username`,`mobile`,`time`
分表以后会做连表查询,如果只是简单的使用yii
union
,并不能实现分页效果,数据会在每页都全部显示出来,要想实现
union
分页 ,必须再进行一次整体查询才可以,图中框选的就是实现分页的关键代码。
2.多字段
排序
:
$all = Questions::find()->orderBy('createTime desc')->asArray()-...
最近使用
SQL
语句进行
UNION
查询,惊奇的发现:
SQL
没
问题
,
UNION
查询也没
问题
,都可以得到想要的结果,可是在对结果进行
排序
的时候,却出
问题
了。
1.
UNION
查询没
问题
(感谢dingjun123版主 为本文提供帮助)
union
怎么
排序
?许多人肯定会说 根据第一字段来
排序
,呵呵,这个答案能得50分!考虑到如果select的第一个字段是重复时,会怎样?看一个测试!
SQL
> select 1 ...
SQL
优化必知技巧—— 避免
排序
我们知道
sql
语言中,用户不能显示地命令
数据库
进行
排序
操作。对用户隐藏这样操作正式
SQL
的设计思想。但
数据库
有些命令会对结果进行
排序
,当数据量较大时,
排序
会非常耗时。本文我们讨论如何避免无谓的
排序
,提升
SQL
执行效率。
会进行
排序
的
SQL
命令
下面列举会
排序
的代表性运算:
GROUP BY 子句
ORDER BY 子句
聚合函数(SUM,COUNT,AV...
SQL
UNION
操作符
UNION
操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,
UNION
内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SQL
UNION
语法
SELECT column_name(s) FROM table_name1
UNION
SELECT c...