我正在尝试建立一种类似小测验的游戏。为此,我有以下表格:
团队
团队日志
每个团队由两个用户组成; 每个用户最初都有一定数量的线索; 线索数可以增加或减少。不能保证最高的数字是最新的; 我需要根据用户自加入以来找到的线索数量的平均值(对于团队中的两个用户),根据行上的clues_found的最大日期减去记录上的clues_found的最小日期,获得团队的排名(百分比)。
例如,如果我对每个表格有以下数据: 团队表数据
团队日志表数据
期望结果
作为参考,这是一个中间表示,可能有助于理解:
到目前为止,我有以下的 SQL 语句:
但是这会返回一个错误,因为我不被允许在第二个查询中使用base.user_id。我也不太确定我是否朝着正确的方向前进。有人可以帮忙吗?
团队
CREATE TABLE `teams` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`creator_id` int(11) NOT NULL,
`friend_id` int(11) DEFAULT NULL,
`team_name` varchar(128) NOT NULL,
PRIMARY KEY (`id`)
);
团队日志
CREATE TABLE IF NOT EXISTS `progress_tracker` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`user_id` int(8) NOT NULL,
`team_id` int(11) NOT NULL,
`date` date NOT NULL,
`clues_found` int(11) NOT NULL,
`clues_to_find` int(11) NOT NULL,
PRIMARY KEY (`id`)
);
每个团队由两个用户组成; 每个用户最初都有一定数量的线索; 线索数可以增加或减少。不能保证最高的数字是最新的; 我需要根据用户自加入以来找到的线索数量的平均值(对于团队中的两个用户),根据行上的clues_found的最大日期减去记录上的clues_found的最小日期,获得团队的排名(百分比)。
例如,如果我对每个表格有以下数据: 团队表数据
+--------+------------+------------+---------------+
| id | creator_id | friend_id | team_name |
+--------+------------+------------+---------------+
| 1 | 25 | 28 | Test1 |
| 2 | 31 | 5 | Test2 |
+--------+------------+------------+---------------+
团队日志表数据
+--------+---------+---------+------------+-------------+---------------+
| id | user_id | team_id | date | clues_found | clues_to_find |
+--------+---------+---------+------------+-------------+---------------+
| 1 | 25 | 1 | 2013-01-6 | 3 | 24 |
| 2 | 25 | 1 | 2013-01-8 | 7 | 24 |
| 3 | 25 | 1 | 2013-01-10 | 10 | 24 |
| 4 | 28 | 1 | 2013-01-8 | 5 | 30 |
| 5 | 28 | 1 | 2013-01-14 | 20 | 30 |
| 6 | 31 | 2 | 2013-01-11 | 6 | 14 |
| 7 | 5 | 2 | 2013-01-9 | 2 | 20 |
| 8 | 5 | 2 | 2013-01-10 | 10 | 20 |
| 9 | 5 | 2 | 2013-01-12 | 14 | 20 |
+--------+---------+---------+------------+-------------+---------------+
期望结果
+-------------+---------------------+
| team_id | team_percentage |
+-------------+---------------------+
| 1 | 39,58333333 |
| 2 | 30 |
+-------------+---------------------+
作为参考,这是一个中间表示,可能有助于理解:
+-------------+---------+---------------------+
| user_id | team_id | precentage_per_user |
+-------------+---------+---------------------+
| 25 | 1 | 29,16666667 |
| 28 | 1 | 50 |
| 31 | 2 | 0 |
| 5 | 2 | 60 |
+-------------+---------+---------------------+
到目前为止,我有以下的 SQL 语句:
SELECT STRAIGHT_JOIN
tl2.team_id, (tl2.weight - tl1.weight)*100/tl2.clues_to_find
from
( select
team_id,user_id,clues_found
FROM
`team_log`
where 1
group by
team_id, user_id
order by
`date` ) base
join (select team_id, user_id, clues_found, clues_to_find from `team_log` where user_id = base.user_id and team_id = base.team_id group by team_id, user_id order by `date` desc) tl2
但是这会返回一个错误,因为我不被允许在第二个查询中使用base.user_id。我也不太确定我是否朝着正确的方向前进。有人可以帮忙吗?