首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL查询中使用select作为偏移量的结果

如何在SQL查询中使用select作为偏移量的结果
EN

Stack Overflow用户
提问于 2013-12-18 17:02:10
回答 1查看 322关注 0票数 4

我试图创建一个SQL查询来返回我需要的内容,而不是创建2个查询,但我需要使用其中一个查询的结果作为另一个查询的offset

我的表有带有分数的用户答案,每个用户可能在该表中有多个答案。我要计算有序分数表的中间点。

示例:

用户答案:

  1. 用户1-5点
  2. 用户1- 15点
  3. 用户2-8点
  4. 用户3- 12点

排名表:

  1. 用户1- 20点
  2. 用户3-12点<中点
  3. 用户2-8点

解决方案:

第一个查询计算中间点:

代码语言:javascript
复制
SELECT CEILING(count(Distinct(id_user)) / 2) as position 
FROM us_user_response 
where id_round=1

查询结果:

职位:2

第二个查询创建有序的排名表:

代码语言:javascript
复制
SELECT sum(points) as score 
FROM us_user_response 
where id_round=1 
GROUP BY id_user 
Order by score DESC

现在我想创建一个返回中间用户得分的大查询,只需要使用第一个查询结果作为第二个查询的offset

代码语言:javascript
复制
SELECT sum(points) as score 
      FROM us_user_response 
      where id_round=1
      GROUP BY id_user 
      Order by score DESC LIMIT 1
        OFFSET (SELECT CEILING(count(Distinct(id_user)) / 2) as position 
                FROM us_user_response where id_round=1)

当然,这不起作用,有没有办法将结果作为offset使用?

编辑:

查询效果很好!我的问题是,是否有任何方法将查询结果用作另一个查询的偏移量。所以我可以在一个查询中完成这个任务。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-21 03:37:37

试着做这样的事情:

代码语言:javascript
复制
SET @line_id = 0;
SET @line_offset = (
    SELECT CEILING(count(Distinct(id_user)) / 2) as position 
    FROM us_user_response 
    WHERE id_round = 1
);

SELECT sum(points) as score,
    IF((@line_id := @line_id + 1) = @line_offset, 1, 0) AS useit 
FROM us_user_response 
WHERE id_round = 1
GROUP BY id_user 
HAVING useit = 1
ORDER BY score;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20664102

复制
相关文章

相似问题

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