php – 如何在SQL查询中将select的结果用作偏移量
发布时间:2020-12-13 22:51:01 所属栏目:PHP教程 来源:网络整理
导读:我试图创建一个单独的SQL查询来返回我需要的内容,而不是创建2个查询,但我需要使用其中一个查询的结果作为另一个查询的偏移量. 我的表有用户答案和分数,每个用户可能在该表中有多个答案.我想计算有序分数表的中间点. 例: 用户回答: 用户1 – 5分 用户1 – 1
我试图创建一个单独的SQL查询来返回我需要的内容,而不是创建2个查询,但我需要使用其中一个查询的结果作为另一个查询的偏移量.
我的表有用户答案和分数,每个用户可能在该表中有多个答案.我想计算有序分数表的中间点. 例: 用户回答: >用户1 – 5分 排名表: >用户1 – 20分 解: 第一个查询计算中间点: SELECT CEILING(count(Distinct(id_user)) / 2) as position FROM us_user_response where id_round=1 查询结果:
第二个查询创建有序排名表: SELECT sum(points) as score FROM us_user_response where id_round=1 GROUP BY id_user Order by score DESC 现在我想创建一个返回中间用户得分的大查询,我只需要将第一个查询结果用作第二个查询的偏移量: 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) 当然,这不起作用,有没有办法将结果用作偏移量? 编辑: 查询效果很好!我的问题是,是否有任何方法可以将查询结果用作另一个查询的结果.所以我可以在一个查询中完成此任务. 解决方法
尝试这样的事情:
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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |