我试图创建一个 SQL 查询来返回我需要的内容,而不是创建 2 个查询,但我需要使用其中一个查询的结果作为另一个查询的 offset
.
我的表中有带分数的用户答案,每个用户在该表中可能有多个答案。我想计算有序分数表的中间点。
例子:
用户回答:
- 用户 1 - 5 分
- 用户 1 - 15 分
- 用户 2 - 8 分
- 用户 3 - 12 分
排名表:
- 用户 1 - 20 分
- 用户 3 - 12 点<中间点
- 用户 2 - 8 分
解决方案:
第一个查询计算中间点:
SELECT CEILING(count(Distinct(id_user)) / 2) as position
FROM us_user_response
where id_round=1
查询结果:
position : 2
第二个查询创建有序排名表:
SELECT sum(points) as score
FROM us_user_response
where id_round=1
GROUP BY id_user
Order by score DESC
现在我想创建一个返回中间用户分数的大查询,我只需要使用第一个查询结果作为第二个查询的offset
:
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
吗?
编辑:
查询很好用!我的问题是是否有任何方法可以将查询结果用作另一个查询的偏移量。所以我可以在一个查询中完成此操作。
最佳答案
尝试这样的事情:
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;
关于php - 如何在 SQL 查询中使用选择的结果作为偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20664102/