@@ -2,77 +2,71 @@ SELECT COUNT(*) AS total_count
2
2
FROM table(MULTISET(
3
3
SELECT
4
4
p.problem_id
5
+ , c.component_id
6
+ , ro.room_id
7
+ , rc.round_id
8
+ , rc.division_id
5
9
, p.name AS problem_name
6
10
, ptl.problem_type_desc AS problem_type
7
11
, CASE WHEN (p.problem_type_id = 1 AND p.proposed_difficulty_id = 1) THEN 'Easy'::nvarchar(50)
8
12
WHEN (p.problem_type_id = 1 AND p.proposed_difficulty_id = 2) THEN 'Medium'::nvarchar(50)
9
13
WHEN (p.problem_type_id = 1 AND p.proposed_difficulty_id = 3) THEN 'Hard'::nvarchar(50)
10
14
END AS difficulty
11
- , (
12
- SELECT DISTINCT rc.points
13
- FROM round_component rc
14
- INNER JOIN component c ON c.component_id = rc.component_id AND c.problem_id = p.problem_id
15
- INNER JOIN round_segment rs ON rs.round_id = rc.round_id AND rs.segment_id = 1
16
- WHERE rs.start_time = (SELECT MAX(rss.start_time) FROM round_component rc
17
- INNER JOIN component c ON c.component_id = rc.component_id AND c.problem_id = p.problem_id
18
- INNER JOIN round_segment rss ON rss.round_id = rc.round_id AND rss.segment_id = 1)
19
- )AS points
15
+ , rc.points
20
16
, CASE WHEN EXISTS (
21
17
SELECT 1
22
18
FROM component_state cs
23
- INNER JOIN component c ON c.component_id = cs.component_id AND c.problem_id = p.problem_id
24
19
WHERE cs.status_id < 120
20
+ AND cs.component_id = c.component_id
25
21
AND cs.coder_id = @userId@
26
22
UNION ALL
27
23
SELECT 1
28
24
FROM practice_component_state pcs
29
- INNER JOIN component c ON c.component_id = pcs.component_id AND c.problem_id = p.problem_id
30
25
WHERE pcs.status_id < 120
26
+ AND pcs.component_id = c.component_id
31
27
AND pcs.coder_id = @userId@
32
28
) THEN 'New'::nvarchar(50)
33
29
WHEN EXISTS (
34
30
SELECT 1
35
31
FROM component_state cs
36
- INNER JOIN component c ON c.component_id = cs.component_id AND c.problem_id = p.problem_id
37
32
WHERE cs.status_id = 150
33
+ AND cs.component_id = c.component_id
38
34
AND cs.coder_id = @userId@
39
35
UNION ALL
40
36
SELECT 1
41
37
FROM practice_component_state pcs
42
- INNER JOIN component c ON c.component_id = pcs.component_id AND c.problem_id = p.problem_id
43
38
WHERE pcs.status_id = 150
39
+ AND pcs.component_id = c.component_id
44
40
AND pcs.coder_id = @userId@
45
41
) THEN 'Solved'::nvarchar(50)
46
42
WHEN EXISTS (
47
43
SELECT 1
48
44
FROM component_state cs
49
- INNER JOIN component c ON c.component_id = cs.component_id AND c.problem_id = p.problem_id
50
45
WHERE cs.status_id >= 120
46
+ AND cs.component_id = c.component_id
51
47
AND cs.status_id != 150
52
48
AND cs.coder_id = @userId@
53
49
UNION ALL
54
50
SELECT 1
55
51
FROM practice_component_state pcs
56
- INNER JOIN component c ON c.component_id = pcs.component_id AND c.problem_id = p.problem_id
57
52
WHERE pcs.status_id >= 120
53
+ AND pcs.component_id = c.component_id
58
54
AND pcs.status_id != 150
59
55
AND pcs.coder_id = @userId@
60
56
) THEN 'Viewed'::nvarchar(50)
61
57
END AS status
62
58
, NVL((
63
59
SELECT
64
- points
65
- FROM component_state cs
66
- INNER JOIN component c ON c.component_id = cs.component_id AND c.problem_id = p.problem_id
67
- INNER JOIN submission s ON s.submission_number = cs.submission_number AND s.component_state_id = cs.component_state_id
68
- WHERE cs.coder_id = @userId@
69
- AND s.submit_time = (
70
- SELECT MAX(submit_time)
71
- FROM component_state cs
72
- INNER JOIN submission s ON s.submission_number = cs.submission_number AND s.component_state_id = cs.component_state_id
73
- INNER JOIN component c ON c.component_id = cs.component_id AND c.problem_id = p.problem_id)
60
+ points
61
+ FROM practice_component_state pcs
62
+ WHERE pcs.round_id = rc.round_id
63
+ AND pcs.component_id = c.component_id
64
+ AND pcs.coder_id = @userId@
74
65
), 0) AS my_points
75
66
FROM problem p
67
+ INNER JOIN component c ON c.problem_id = p.problem_id
68
+ INNER JOIN round_component rc ON rc.component_id = c.component_id
69
+ INNER JOIN room ro ON ro.round_id = rc.round_id AND ro.room_type_id = 3 -- practice room
76
70
INNER JOIN problem_type_lu ptl ON ptl.problem_type_id = p.problem_type_id
77
71
WHERE p.status_id = 90
78
72
)) srp
0 commit comments