首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL 8嵌套选择计数

MySQL 8嵌套选择计数
EN

Stack Overflow用户
提问于 2019-01-24 09:25:10
回答 2查看 427关注 0票数 2
代码语言:javascript
复制
SELECT mapname, 
    (SELECT count(1)+1 FROM ck_bonus b WHERE a.mapname=b.mapname AND a.runtime > b.runtime AND a.zonegroup = b.zonegroup AND b.style = %i) AS rank, 
    (SELECT count(1) FROM ck_bonus b WHERE a.mapname = b.mapname AND a.zonegroup = b.zonegroup AND b.style = %i) as total 
    FROM ck_bonus a WHERE steamid = '%s' AND style = %i;

这段代码过去可以很好地在MySQL8更新前完成,但是现在出现了这个错误。

代码语言:javascript
复制
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
 'rank, (SELECT count(1) FROM ck_bonus b WHERE a.mapname = b.mapname AND a.zonegro' at line 1

我通过谷歌,却找不到正确的答案。用count()或count (*)替换count(1)没有帮助。

对于MySQL8,这个查询应该是什么样的呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-24 09:43:51

rank这个词在MySql 8中是一个保留字

因此,使用另一个别名,或回勾别名名称。

在MySql 8中,您可以使用窗口函数

代码语言:javascript
复制
SELECT 
 mapname, 
 DENSE_RANK() OVER (PARTITION BY mapname, zonegroup, steamid, style ORDER BY runtime DESC) AS `rank`,
 COUNT(*) OVER (PARTITION BY mapname, zonegroup, steamid, style) AS total
FROM ck_bonus 
WHERE steamid = '%s' AND style = %i;
票数 4
EN

Stack Overflow用户

发布于 2019-01-24 09:38:01

您忽略了outer & subquery中的单引号:

代码语言:javascript
复制
SELECT mapname, 
       (SELECT count(1) FROM ck_bonus b WHERE a.mapname = b.mapname AND a.runtime > b.runtime AND a.zonegroup = b.zonegroup AND b.style = '%i') + 1 AS rnk, 
       (SELECT count(1) FROM ck_bonus b WHERE a.mapname = b.mapname AND a.zonegroup = b.zonegroup AND b.style = '%i') as total 
FROM ck_bonus a 
WHERE steamid = '%s' AND style = '%i';

我怀疑您需要LIKE谓词而不是=

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54343203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档