MySQL是否有一种很好的方式来复制SQL Server功能ROW_NUMBER()
?
例如:
SELECT
col1, col2,
ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col3 DESC) AS intRow
FROM Table1
Run Code Online (Sandbox Code Playgroud)
然后,我可以,例如,添加一个限制intRow
为1 的条件,以获得col3
每(col1, col2)
对最高的单行.
如果项目已排序,我可以运行select语句并获取行号吗?
我有这样一张桌子:
mysql> describe orders;
+-------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+----------------+
| orderID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| itemID | bigint(20) unsigned | NO | | NULL | |
+-------------+---------------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
然后我可以运行此查询以按ID获取订单数量:
SELECT itemID, COUNT(*) as ordercount
FROM orders
GROUP BY itemID ORDER BY ordercount DESC;
Run Code Online (Sandbox Code Playgroud)
这给了我itemID
表中每个的计数如下:
+--------+------------+
| itemID | ordercount |
+--------+------------+
| 388 | 3 |
| 234 | …
Run Code Online (Sandbox Code Playgroud) 我想用它ROW_NUMBER()
来...
max(ROW_NUMBER())
- >或者我猜这也是所有行的计数我试过做:
SELECT max(ROW_NUMBER() OVER(ORDER BY UserId)) FROM Users
Run Code Online (Sandbox Code Playgroud)
但它似乎没有工作......
ROW_NUMBER()
使用给定的资料片,即得.如果我有一个名字,我想知道名字来自哪一行.我认为这将类似于我为#1尝试的东西
SELECT ROW_NUMBER() OVER(ORDER BY UserId) From Users WHERE UserName='Joe'
Run Code Online (Sandbox Code Playgroud)
但这也不起作用......
有任何想法吗?
什么相当于SQL Server中的Oracle RowID?
如何在文件的每一行的开头添加数字?
例如:
This is the text from the file.
变为:
000000001 This is 000000002 the text 000000003 from the file.
在Office 2007之前,Excel最多有65,000行.Office 2007突破了最多100万行,这当然更好; 但我很好奇 - 为什么会有限制?显然,随着电子表格大小的增加,性能会逐渐降低; 但是,通过从一个小工作表开始并仅根据需要动态"重新调整"它,对Excel进行优化应该不是很难.鉴于将限制从65K增加到100万必须完成多少工作,为什么它们不会一路走下去,因此仅受可用内存和磁盘空间的限制?
我有一个由其他人编写的SQL查询,我正在试图找出它的作用.有人可以解释这里Partition By
和Row_Number
关键字的作用,并给出一个简单的实例,以及为什么要使用它?
分区示例:
(SELECT cdt.*,
ROW_NUMBER ()
OVER (PARTITION BY cdt.country_code, cdt.account, cdt.currency
ORDER BY cdt.country_code, cdt.account, cdt.currency)
seq_no
FROM CUSTOMER_DETAILS cdt);
Run Code Online (Sandbox Code Playgroud)
我在网上看过一些例子,它们有点太深入了.
提前致谢!
我有一个包含列的数据集Date
,Cat
和QTY
.我想要做的是添加一个唯一的列,它只Cat
在行计数时计算唯一值.这就是我希望我的结果集看起来像:
通过使用下面的SQL查询,我可以使用该row_number()
函数获取行.
但是,我无法获得上面描述的那个独特的专栏.当我将group by添加到OVER
子句时,它不起作用.有没有人有任何想法,我怎么能让这个独特的计数专栏工作?
SELECT
Date,
ROW_NUMBER() OVER (PARTITION BY Date ORDER By Date, Cat) as ROW,
Cat,
Qty
FROM SOURCE
Run Code Online (Sandbox Code Playgroud) 如何将行号投影到linq查询结果集上.
而不是说:
field1,field2,field3
field1,field2,field3
我想要:
1,field1,field2,field3
2,field1,field2,field3
以下是我对此的尝试:
public List<ScoreWithRank> GetHighScoresWithRank(string gameId, int count)
{
Guid guid = new Guid(gameId);
using (PPGEntities entities = new PPGEntities())
{
int i = 1;
var query = from s in entities.Scores
where s.Game.Id == guid
orderby s.PlayerScore descending
select new ScoreWithRank()
{
Rank=i++,
PlayerName = s.PlayerName,
PlayerScore = s.PlayerScore
};
return query.ToList<ScoreWithRank>();
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,"Rank = i ++"行引发了以下编译时异常:
"表达式树可能不包含赋值运算符"
如果可能的话,我需要一个t-sql查询,它从任意表返回值,也返回一个增量整数列,第一行的值为1,第二行的值为2,依此类推.
这个列实际上并不存在于任何表中,并且必须是严格增量的,因为ORDER BY子句可以对表的行进行排序,并且我希望增量行始终处于完美形状...
提前致谢.
--EDIT抱歉,忘记提及,必须在SQL Server 2000上运行