是否有一种简单的方法可以通过WHERE idIN(...)子句分别订购MySQL结果?例:
SELECT * FROM articles WHERE articles.id IN (4, 2, 5, 9, 3)
Run Code Online (Sandbox Code Playgroud)
回来
Article with id = 4
Article with id = 2
Article with id = 5
Article with id = 9
Article with id = 3
Run Code Online (Sandbox Code Playgroud)
并且
SELECT * FROM articles WHERE articles.id IN (4, 2, 5, 9, 3) LIMIT 2,2
Run Code Online (Sandbox Code Playgroud)
回来
Article with id = 5
Article with id = 9
Run Code Online (Sandbox Code Playgroud)
更新:更具体地说,我想避免篡改括号中的数据WHERE articles.id IN (4, 2, 5, 9, 3),因为这些ID是动态的并且是自动排序的.
也许有人可以向我解释这一点,但是当从Oracle查询数据表时,如果存在密钥的多个记录(比如客户ID),那么如果没有隐含的"order by",那么该客户首先出现的记录可能会有所不同.声明通过说替代字段(例如事务类型)来强制执行订单.因此,在同一个表上运行相同的查询可能会产生与10分钟前不同的记录顺序.
例如,一次运行可以产生:
Cust_ID,Transaction_Type
123 A
123 B.
除非使用"Transaction by Transaction_Type"子句,否则Oracle可以在下次运行查询时随意返回以下结果:
Cust_ID,Transaction_Type
123 B
123 A.
我想我的印象是Oracle中有一个数据库默认的行排序(可能)反映了磁盘介质上的物理排序.换句话说,任意顺序是不可变的,并且在重新运行查询时将保证相同的结果.
这是否与优化器有关,以及它如何决定最有效地检索数据的位置?
当然,编程视角下的最佳实践是强制要求任何顺序,我对这种行为感到有点不安.
如果我做一个查询,订购如下的元素,我得到升序.
var i = from a in new int[] { 1, 2, 3, 4, 5 }
orderby a
select a;
Run Code Online (Sandbox Code Playgroud)
如果我添加ascending关键字我得到相同的结果.
var i = from a in new int[] { 1, 2, 3, 4, 5 }
orderby a ascending
select a;
Run Code Online (Sandbox Code Playgroud)
我认识到ascending在第二个示例中添加关键字可以提高可读性,因为它不需要知道默认顺序orderby.
该ascending关键字是否还有其他原因存在?
我也有兴趣知道为什么这个(突破性变化?)只是用于一个特定情况.
编辑:请参阅下面的评论,@ Joe指出,这不是一个重大变化,因为它是一个上下文关键字.
我们可以按顺序使用别名字段名吗?
例如.
SELECT id, name AS firstname
FROM users
ORDER BY firstname
Run Code Online (Sandbox Code Playgroud)
可能吗 ?当我尝试这个时,它出错了.
可以说我有这些专栏
uniqueID|Money|Quantity|MoneyOrder|QuantityOrder
1|23|12||
2|11|9||
3|99|100||
Run Code Online (Sandbox Code Playgroud)
我想要做的是更新MoneyOrder并QuantityOrder基于值ORDER BY.
结果将是:
uniqueID|Money|Quantity|MoneyOrder|QuantityOrder
1|23|12|2|1
2|11|90|1|2
3|99|100|3|3
Run Code Online (Sandbox Code Playgroud)
我希望更新像标识列一样运行而不实际使其成为标识列.我知道我可以按'x'排序,订单就是结果,但我想生成一个报告,你可以逐行查看该项目.
这样的事情可能update mytable set Moneyorder = 'imnotsure' order by MoneyOrder asc吗?
我想知道通过sequence_within_parent列在层次结构查询中对子项进行排序的Oracle SQL查询.
示例数据集和查询是:
create table tasks (task_id number
,parent_id number
,sequence_within_parent number
,task varchar2(30)
);
insert into tasks values ( 1, NULL, 0, 'Task 1');
insert into tasks values ( 2, 1, 1, 'Task 1.1');
insert into tasks values ( 3, 1, 2, 'Task 1.2');
insert into tasks values ( 4, 2, 2, 'Task 1.1.2');
insert into tasks values ( 5, 3, 1, 'Task 1.2.1');
insert into tasks values ( 6, 2, 1, 'Task 1.1.1');
insert into tasks values ( …Run Code Online (Sandbox Code Playgroud) 我有2个表:tblRider和tbl_SCORE.tblRider拥有关于所有车手(竞争对手)的所有信息,并且在tbl_SCORE中保存了所有车手的得分.我想在tblRider中更新一列HalfPipeFinal.标准此列设置为0,但我想将其设置为1,以获得20个最佳分数的车手.(所以只有20名最佳车手可以参加决赛,而那些参赛选手中有1名参赛者是HalfPipeRider)
这是我的查询:
UPDATE tblRider
JOIN tbl_SCORE ON tblRider.riderID = tbl_SCORE.riderID
SET tblRider.HalfPipeFinal = 1
WHERE `gameID` =35
ORDER BY `score` DESC
limit 20;**
Run Code Online (Sandbox Code Playgroud)
如果我运行此查询,我会收到此错误:"UPDATE和ORDER BY的使用不正确"所以我去看了,显然你不能在连接中使用update和order by.所以我正在寻找另一种方法来编写这个查询而没有订单,但是我找不到它.
所有帮助表示赞赏.谢谢
我基本上有以下(我的)SQL查询
SELECT * FROM `address`
ORDER BY ISNULL(`company`), `company` ASC, COALESCE(`parent_id`, `address_id`), `parent_id` IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
这项工作完美无缺
我的目标是以下排序输出
ID| PARENT_ID | COMPANY | NAME
1 | NULL | A | NULL
2 | 1 | A.A | NULL
3 | 1 | A.B | NULL
4 | NULL | B | NULL
5 | NULL | C | NULL
6 | NULL | D | NULL
7 | 6 | D.A | NULL
8 | NULL | NULL | A …Run Code Online (Sandbox Code Playgroud) 我不知道如何标题这个问题.如果你有更好的话,请纠正我.
我有两个表,用户和帖子.
用户:
id | username | password | ...
Run Code Online (Sandbox Code Playgroud)
帖子:
id | author_id | title | content | ...
Run Code Online (Sandbox Code Playgroud)
现在我想列出"最活跃"的用户 - 撰写帖子最多的用户.具体来说,我想要top 10结果.
SELECT u.username, COUNT(p.id) AS count
FROM Posts p, Users u
WHERE u.id=p.author_id
GROUP BY p.author_id
ORDER BY count DESC
LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
我可以得到预期的结果.但是,如果某些用户具有相同数量的帖子,则排名可能不是" 公平的 ".
例如,我可能得到如下结果:
User 1 | 14
User 2 | 13
...
User 9 | 4
User 10 | 4
Run Code Online (Sandbox Code Playgroud)
实际上,有几个用户有4帖子.
所以,top 10可能不完全是10结果.如何获得更" 公平 "的结果,其中包含有4 …
我有一个存储过程,它依赖于一个参数来启动一个命令:
DROP PROCEDURE [dbo].[GetUsersByClusterAndUserName]
GO
CREATE PROCEDURE [dbo].[GetUsersByClusterAndUserName]
@SortField [nvarchar] (256) = 'UserName',
@SortOrder [int] = 0
AS
SELECT * FROM [User]
ORDER BY
CASE WHEN @SortOrder = 0 THEN
CASE
WHEN @SortField = 'UserName' THEN User_UserName
WHEN @SortField = 'LastLoginDate' THEN User_LastLoginDate
WHEN @SortField = 'CreationDate' THEN User_CreationDate END
END ASC,
CASE WHEN @SortOrder = 1 THEN
CASE
WHEN @SortField = 'UserName' THEN User_UserName
WHEN @SortField = 'LastLoginDate' THEN User_LastLoginDate
WHEN @SortField = 'CreationDate' THEN [User_CreationDate] END
END DESC …Run Code Online (Sandbox Code Playgroud) sql-order-by ×10
mysql ×6
sql ×6
oracle ×2
c# ×1
doctrine ×1
doctrine-orm ×1
hierarchy ×1
identity ×1
in-clause ×1
join ×1
keyword ×1
limit ×1
linq ×1
rows ×1
select ×1
sql-server ×1
sql-update ×1
symfony ×1