sql计数和顺序
Posted
技术标签:
【中文标题】sql计数和顺序【英文标题】:sql count and order 【发布时间】:2016-02-21 18:42:23 【问题描述】:我有一个数据库和两个命令来显示相同的东西
SELECT name, score
FROM sm_easyrank
ORDER BY score DESC, name ASC
LIMIT 0, 10
这会选择按分数排序的球员,如果两个球员的分数相同,他们将按名字排序。
SELECT count(*)
FROM sm_easyrank
WHERE score >= (SELECT (score)
FROM sm_easyrank
WHERE steamid = '%s'
)
这将计算我之前有多少玩家。
问题是:我有一个排名第一,另一个排名第二(如果我与其他人的分数相同)。我想按名称订购第二名得分相同的球员。
sm_easyrank 是表名
score 是带有分数的列(数字列) steamid 是唯一的 id name 是一个包含人名的列 对不起我的英语!
【问题讨论】:
请编辑您的问题并提供示例数据和所需结果。目前尚不清楚您要返回什么。那是steamid
,它与name
有什么关系?
我编辑了,不知道现在好不好,我是最新的
那么你想找出所有得分比你高的人的名字和分数吗?
见:msdn.microsoft.com/en-us/library/ms176102.aspx
这适用于哪个 RDBMS?无论您使用的是 mysql、PostgreSQL、Oracle、SQL Server 还是 IBM DB2——甚至是其他东西,它通常都会产生影响。请为您的问题添加相关标签!
【参考方案1】:
如果我理解正确,您可以使用JOIN
和包含分数和名称的条件来做您想做的事情:
SELECT count(*)
FROM sm_easyrank s JOIN
sm_easyrank s2
ON s2.steamid = '%s' AND
(s.score > s2.score OR
s.score = s2.score AND s.name <= s2.name
);
【讨论】:
这行得通,非常感谢。下次我会更明确。我是新来的,我不知道这里的情况如何以上是关于sql计数和顺序的主要内容,如果未能解决你的问题,请参考以下文章
无论如何,为了提高 SQL 查询的性能,以按标签匹配计数查找具有顺序的行