1
我有一个工作查询,但必须有更好的方法来做到这一点。 下面是工作查询MYSQL查询更好的方法来分组,如果值?
SELECT gameid FROM(
SELECT gameid, SUM(count) as total FROM (
SELECT IF(vanguard = 1, 30, gameid) as gameid, count FROM (
SELECT opserv_operation.gameid, opserv_games.vanguard, COUNT(opserv_games.gameid) AS count FROM opserv_operation_attendees INNER JOIN opserv_operation ON opserv_operation_attendees.operationid = opserv_operation.operationid INNER JOIN opserv_games on opserv_operation.gameid = opserv_games.gameid WHERE (start_time >= '2015-11-11' || FIND_IN_SET(opserv_operation.operationid, '17951,17701,17702,17775,17969,17890,17958,17966,17900')) AND completed = 1 AND opserv_operation_attendees.userid = 5750 AND opserv_operation_attendees.status = 4 AND opserv_operation.type <> 5 AND opserv_operation.completed = 1 GROUP BY opserv_operation.gameid) as m
) as l
GROUP BY gameid
ORDER BY total DESC LIMIT 1) as k
主查询
SELECT opserv_operation.gameid, opserv_games.vanguard, COUNT(opserv_games.gameid) AS count FROM opserv_operation_attendees INNER JOIN opserv_operation ON opserv_operation_attendees.operationid = opserv_operation.operationid INNER JOIN opserv_games on opserv_operation.gameid = opserv_games.gameid WHERE (start_time >= '2015-11-11' || FIND_IN_SET(opserv_operation.operationid, '17951,17701,17702,17775,17969,17890,17958,17966,17900')) AND completed = 1 AND opserv_operation_attendees.userid = 5750 AND opserv_operation_attendees.status = 4 AND opserv_operation.type <> 5 AND opserv_operation.completed = 1 GROUP BY opserv_operation.gameid
游戏ID先锋
所以这里是棘手的部分。我需要它来分组并统计所有的值,但如果gameid = 30或先锋= 1,那么他们应该全部统计在一起。
因此,与上述数据,我唯一需要的是在这种情况下,游戏ID返回的游戏ID 30.将有这将是13
必须有比我有更好的办法最计数完成了。
编辑:到目前为止,这个作品非常感谢Ed Gibbs。然而,仍然返回两个值,我猜只有办法是有另一个子查询?去玩游戏。
SELECT
CASE WHEN vanguard = 1 THEN 30 ELSE gameid END AS gameid,
SUM(count) AS total
FROM (SELECT opserv_operation.gameid, opserv_games.vanguard, COUNT(opserv_games.gameid) AS count FROM opserv_operation_attendees INNER JOIN opserv_operation ON opserv_operation_attendees.operationid = opserv_operation.operationid INNER JOIN opserv_games on opserv_operation.gameid = opserv_games.gameid WHERE (start_time >= '2015-11-11' || FIND_IN_SET(opserv_operation.operationid, '17951,17701,17702,17775,17969,17890,17958,17966,17900')) AND completed = 1 AND opserv_operation_attendees.userid = 5750 AND opserv_operation_attendees.status = 4 AND opserv_operation.type <> 5 AND opserv_operation.completed = 1 GROUP BY opserv_operation.gameid) as l
GROUP BY CASE WHEN vanguard = 1 THEN 30 ELSE gameid END
ORDER BY total DESC
LIMIT 1;
这是非常接近的。我将gameid = 1更改为vanguard = 1,并将括号内的主要查询放在opserv_operation的位置。但其返回的2个值仍然是,gameid和总数。我需要它来做游戏ID。获得游戏ID的唯一方法是做另一个子查询? – user3452747
对不起“gameid”vs“先锋队”;很高兴你拿起了这些作品:)你可以通过SUM进行排序,而不必将它作为“SELECT”列表的一部分 - 它显示在我更新的答案中。 –
非常感谢您的协助!我其实学到了一些东西 – user3452747