我需要在 SQL 中进行高级选择,但我被卡住了。
我有下表:
id | user_id | position | value
1 | 1 | 1 | 1
1 | 1 | 2 | 1
1 | 1 | 3 | 3
1 | 2 | 1 | 2
1 | 2 | 2 | 2
1 | 2 | 3 | 2
1 | 3 | 1 | 3
1 | 3 | 2 | 2
1 | 3 | 3 | 1
我需要一个查询,它给我一个按如下顺序排列的结果集:
- 每个用户的总和(用户 1:5,用户 2:6,用户 3:6)
- 每个用户的位置 3 的值(用户 1:3,用户 2:2,用户 3:1)
- Val for pos 3 + val for pos 2 每个用户(用户 1:4,用户 2:4,用户 3:4)
- 位置 3 的值 + 位置 2 的值 + 位置 1 的值 每个用户(用户 1:5,用户 2:6,用户 3:6)
这只是一个例子,表实际上可以包含更多的位置,所以我需要一个没有硬编码在三个位置上的查询。
注意:每个 user_id 总是有相同数量的位置。在此示例中,它是三个,但我也可以截断表格并使用五个位置为每个用户添加数据。
一个丑陋的解决方案是假设不超过十个位置,创建 pos1、pos2 等作为列,然后在查询中相应地添加它们。如果你只使用三个位置,你会得到很多 NULL 值,而且你也会被最多十个位置卡住。
我考虑过使用临时表,但也没有找到突破口。
你会怎么做?