-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathqueries.sql
More file actions
128 lines (115 loc) · 2.1 KB
/
Copy pathqueries.sql
File metadata and controls
128 lines (115 loc) · 2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
-- * 01
SELECT
u.DisplayName,
u.Location,
u.Reputation
FROM
Users AS u
ORDER BY
Reputation DESC;
-- * 02
SELECT
p.Title,
u.DisplayName
FROM
Posts AS p
INNER JOIN
Users AS u ON p.OwnerUserId = u.Id
WHERE
p.Title IS NOT NULL;
-- * 03
SELECT
u.DisplayName,
AVG(p.Score) AS AverageScore
FROM
Users u
INNER JOIN
Posts p ON u.ID = p.OwnerUserId
GROUP BY
u.ID,
u.DisplayName
ORDER BY
AverageScore DESC;
-- * 04
SELECT
u.DisplayName
FROM
Users AS u
WHERE
Id IN (
SELECT
c.UserId
FROM
Comments AS c
GROUP BY
c.UserId
HAVING
COUNT(*) > 100
);
-- * 05
UPDATE
Users
SET
Location = 'Desconocido'
WHERE
Location IS NULL OR Location = '';
PRINT
'Actualizacion completada. Ubicaciones vacias cambiadas a "Desconocido".';
-- After
SELECT
u.DisplayName,
u.Location
FROM
Users AS u
WHERE
u.Location = 'Desconocido';
-- * 06
DECLARE @RowsAffected INT;
DELETE FROM Comments
WHERE
UserId IN (
SELECT Id
FROM Users
WHERE Reputation < 100
);
SET @RowsAffected = @@ROWCOUNT;
PRINT
'Comments from ' + CAST(@RowsAffected AS VARCHAR(10)) + ' users with less than 100 reputation have been deleted.';
-- * 07
SELECT
u.DisplayName,
COALESCE(p.TotalPosts, 0) AS TotalPosts,
COALESCE(c.TotalComments, 0) AS TotalComments,
COALESCE(b.TotalBadges, 0) AS TotalBadges
FROM
Users u
LEFT JOIN
(SELECT OwnerUserId, COUNT(DISTINCT Id) AS TotalPosts
FROM Posts
GROUP BY OwnerUserId) p ON u.Id = p.OwnerUserId
LEFT JOIN
(SELECT UserId, COUNT(DISTINCT Id) AS TotalComments
FROM Comments
GROUP BY UserId) c ON u.Id = c.UserId
LEFT JOIN
(SELECT UserId, COUNT(DISTINCT Id) AS TotalBadges
FROM Badges
GROUP BY UserId) b ON u.Id = b.UserId
ORDER BY
u.DisplayName;
-- * 08
SELECT TOP 10
Title,
Score
FROM
Posts
ORDER BY
Score DESC;
-- * 09
SELECT TOP 5
Text,
CreationDate
FROM
Comments
ORDER BY
CreationDate DESC;