반응형
하위 쿼리에 가입하려면 어떻게 해야 합니까?
저는 이와 같은 제 데이터를 가지고 있고, 저는 수행된 고유 활동의 총 개수와 수행된 고유 활동의 모든 포인트의 합이 있는 사용자 목록을 가져오려고 노력하고 있습니다. 따라서 사용자가 활동을 13번 반복하면 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;
완료된 테이블에 새 행을 추가하여 필요한 내용을 설명합니다.
다음과 같이 쿼리를 단순화할 수 있습니다.
SELECT u.id, SUM(a.points), count(a.*)
FROM `user` u
LEFT JOIN done d ON done.user_id = u.id
LEFT JOIN activity a ON d.activity_id = a.id
GROUP BY u.id
제가 원하는 대로 할 수 있었던 것 같은데, 비효율적인 진술인가요?
SELECT activity_done.id, SUM(activity_done.points) as total_points, user_c.name
FROM
(
SELECT done_c.user_id as id, points
FROM
done as done_c
LEFT JOIN
activity as activity_c
ON
activity_c.id = done_c.activity_id
GROUP BY
done_c.`activity_id`,
done_c.`user_id`
) as activity_done
LEFT JOIN
user as user_c
ON
user_c.id = activity_done.id
GROUP BY
activity_done.id
언급URL : https://stackoverflow.com/questions/33789083/how-do-i-left-join-a-subquery
반응형
'programing' 카테고리의 다른 글
| 경고: refname''HEAD'는 애매합니다. (0) | 2023.09.16 |
|---|---|
| javascript를 사용하여 브라우저에서 TCP Socket에 연결 (0) | 2023.09.16 |
| mysql의 값에서 선택 (0) | 2023.09.16 |
| 배경색과 관련된 CSS @media 인쇄 문제; (0) | 2023.09.16 |
| 문자열 출력: C#의 형식 또는 콘캣? (0) | 2023.09.16 |