【发布时间】:2015-11-18 19:50:42
【问题描述】:
我有这样的数据,我正在尝试获取用户列表,其中包含完成的唯一活动总数和完成的所有独特活动点的总和,因此,例如,如果用户重复活动 1 3 次,将计为 100 以及其他活动等。
我试过了,但它似乎不起作用
SELECT *,
( SELECT COUNT(*)
FROM done
WHERE done.user_id = user.id
) as activity_count
FROM
user AS user
LEFT JOIN
(
SELECT SUM(points), d.user_id
FROM done AS d
LEFT JOIN activity AS a
ON d.activity_id = a.id
GROUP BY user_id
) AS subtable
ON subtable.user_id = user.id
我的数据架构是这样的:
CREATE TABLE IF NOT EXISTS `user` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC));
CREATE TABLE IF NOT EXISTS `activity` (
`id` INT NOT NULL,
`name` VARCHAR(45) NULL,
`points` INT UNSIGNED NULL,
PRIMARY KEY (`id`));
CREATE TABLE IF NOT EXISTS `done` (
`id` INT NOT NULL,
`user_id` INT UNSIGNED NULL,
`activity_id` INT UNSIGNED NULL,
`status` INT UNSIGNED NULL,
PRIMARY KEY (`id`));
INSERT INTO user
(`id`, `name`)
VALUES
(1, 'User 1'),
(2, 'User 2'),
(3, 'User 3'),
(4, 'User 4');
INSERT INTO activity
(`id`, `name`, `points`)
VALUES
(1, 'activity 1', 100),
(2, 'activity 2', 200),
(3, 'activity 3', 300),
(4, 'activity 4', 400);
INSERT INTO done
(`id`, `user_id`, `activity_id`, `status`)
VALUES
(1, 1, 1, 2),
(2, 2, 1, 3),
(3, 1, 2, 2),
(4, 3, 1, 1),
(5, 2, 1, 3),
(6, 4, 4, 2),
(7, 3, 1, 1),
(8, 1, 1, 3);
预期结果:
user_id, count_of_unique_activities_done, sum_of_unique_activity_points
1, 2, 300;
2, 1, 100;
3, 1, 100;
4, 1, 400;
在完成表中添加了一个新行以帮助说明我需要什么。
【问题讨论】:
-
doesn't work是什么意思? -
如果你想要唯一计数,应该使用 GROUP BY。
-
想要的输出是什么?
-
@Ultimater 我正在寻找这样的用户列表,用户 ID,完成的独特活动总数,完成的独特活动的总点数将尝试编辑看看我是否可以添加我期望的示例输出的问题。