需求:统计每天每个玩家在每个游戏上进行的局数。牌局记录表结构:log_date(日期)、game_id(游戏ID)、points(json类型,包含玩家信息和得分)。points为json数组,包含用户得分和user_id信息。需将其分离为多行。分离后,利用窗口函数统计每个user_id对应的局数。SQL语句:SELECT game_id, user_id, SUM(COUNT(*)) OVER(PARTITION BY game_id, user_id) AS round_count FROM(SELECT log_date, game_id, (json_array_elements(points::json) ->>'user_id') AS user_id FROM game_record) AS A GROUP BY game_id, user_id;over字句使sum(count(*))作为窗口函数,在game_id和user_id相等的行集上进行计算,得出局数。关注小宅,获取更多内容。文章转载自华为云社区