您可以将`max_step`的计算移至子查询中,并在外层查询中引用该子查询的结果。修改后的SQL如下所示:\n\nsql\nSELECT u.id, u.name, t.max_step, \n SUM(CASE WHEN tur.step = t.max_step THEN ti.value ELSE 0 END)/1000 AS total_flow\nFROM game.task_user_record AS tur\nJOIN game.vp_user AS u ON tur.user_id = u.id\nLEFT JOIN game.task_item AS ti ON ti.id = tur.task_item_id\nJOIN (\n SELECT tur.user_id, MAX(ti.step) AS max_step\n FROM game.task_user_record AS tur\n LEFT JOIN game.task_item AS ti ON ti.id = tur.task_item_id\n GROUP BY tur.user_id\n) AS t ON t.user_id = u.id\nWHERE u.svip IN (0, 1)\nGROUP BY u.id, u.name, t.max_step\n\n\n这里通过子查询`SELECT tur.user_id, MAX(ti.step) AS max_step FROM game.task_user_record AS tur LEFT JOIN game.task_item AS ti ON ti.id = tur.task_item_id GROUP BY tur.user_id`得到每个用户的最大`step`值,并将其命名为`max_step`。然后在外层查询中,我们使用`JOIN`将该子查询的结果与`vp_user`表关联起来,并在`GROUP BY`子句中包含`max_step`,以便正确计算`total_flow`。

优化 SQL 查询:计算每个用户的最大步数和总流量

原文地址: https://www.cveoy.top/t/topic/qd3z 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录