-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase.sql
More file actions
609 lines (465 loc) · 20.6 KB
/
Copy pathdatabase.sql
File metadata and controls
609 lines (465 loc) · 20.6 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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
-- create database called chess_manager_database
CREATE DATABASE chess_manager_database;
-------------------------------------------------------------------------------------------------------------------------
--create entity <users>
CREATE TABLE users(
user_id SERIAL PRIMARY KEY, --field for user ID, autoincrement, primary key
username VARCHAR(35) NOT NULL, --field for username, 35 characters max, not null
password VARCHAR(40) NOT NULL, --field for password, 40 characters max, not null
firstname VARCHAR(20) NOT NULL, --field for firstname, 20 characters max, not null
surname VARCHAR(20) NOT NULL, --field for surname, 20 characters max, not null
email VARCHAR(50) NOT NULL --field for email, 50 characters max, not null
);
--insert a record into entity <users>
INSERT INTO users (username, password, firstname, surname, email)
VALUES ('user1', 'pass1', 'Nestr', 'Lobonov', 'nest@g.com');
--select all rows from entity <users>
SELECT * FROM users;
--update data under username column where user_id = 1
UPDATE users
SET username = NULL
WHERE user_id = 1;
--update data under firstname column where user_id = 1
UPDATE users
SET firstname = 'ThisNameIs21Character'
WHERE user_id = 1;
-------------------------------------------------------------------------------------------------------------------------
--create entity <tournaments>
CREATE TABLE tournaments(
tournament_id SERIAL PRIMARY KEY, --field for tournament ID, autoincrement, primary key
user_id INT REFERENCES users(user_ID) NOT NULL ON DELETE CASCADE,
--field for user ID, foreign key, delete dependent records, not null
name VARCHAR(50) NOT NULL, --field for tournament name, 50 characters max, not null
type TEXT NOT NULL, --field for tournament type, text, not null
bye_value FLOAT NOT NULL, --field for bye value, float, not null
tie_break TEXT, --field for tie break type, text
hide_rating BOOLEAN NOT NULL, --field for hide rating instruction, boolean, not null
status TEXT NOT NULL --field for tournament status, text, not null
);
--insert data into entity <tournaments>
INSERT INTO tournaments (user_id, name, type, bye_value, tie_break, hide_rating, status)
VALUES (1, 'Challenger', 'Swiss System', 1, 'Buchholz Cut 1', TRUE, 'initialised');
INSERT INTO tournaments (user_id, name, type, num_rounds, max_players, bye_value, tie_break, hide_rating)
VALUES (6, 'TestTournament_8', 'test_type', 7, 10, 1, 'test_tie_break', TRUE);
--Boundary Data: max_players (1000)
--updata data under hide_rating column where tournament_id = 1
UPDATE tournaments
SET hide_rating = 'Yess'
WHERE tournament_id = 1;
-------------------------------------------------------------------------------------------------------------------------
--create entity <players>
CREATE TABLE players(
player_id SERIAL PRIMARY KEY, --field for player ID, autoincrement, primary key
name VARCHAR(50) NOT NULL, --field for player's name, 50 characters max, not null
rating SMALLINT CHECK (rating >= 0 AND rating <= 4000) NOT NULL,
--field for player's rating, integer, check is between 0 and 4000, not null
email VARCHAR(50) NOT NULL, --field for player's email, 50 characters max, not null
club VARCHAR(50) NOT NULL, --field for player's club, 50 characters max, not null
created_by INT NOT NULL --field for creator's ID, integer, not null
);
--i didn't make it foreign key specificly, so that the player still stays in the database if the creator was deleted, it just cannot ever be edited again
ALTER TABLE players
ADD COLUMN created_by INT NOT NULL;
--insert data into entity <players>
INSERT INTO players (name, rating, email, club, created_by)
VALUES ('Terra', 1000, 'qqz@k.com', 'Bishops', 1);
--Boundary Data: rating (4000)
--insert into rounds
INSERT INTO rounds (tournament_id, round_number)
VALUES (16, 1);
--Insert into pairings
INSERT INTO pairings (round_id, white_player_id, black_player_id, result)
VALUES (3, 14, null, '');
--select all rows from entity <players>
SELECT * FROM players;
--delete record from entity <tournaments> where tournament_id = 1
DELETE FROM tournaments
WHERE tournament_id = 1;
-------------------------------------------------------------------------------------------------------------------------
--create entity <entries>
CREATE TABLE entries(
entry_id SERIAL PRIMARY KEY, --field for entry ID, autoincrement, primary key
tournament_id INT REFERENCES tournaments(tournament_ID) ON DELETE CASCADE NOT NULL,
--field for tournament ID, foreign key, delete dependent records, not null
player_id INT REFERENCES players(player_ID) ON DELETE CASCADE NOT NULL,
--field for player ID, foreign key, delete dependent records, not null
additional_points FLOAT CHECK (additional_points >= 0 AND additional_points <= 50) NOT NULL,
--field for additional points, float, check is between 0 and 50, not null
eliminated BOOLEAN NOT NULL --field for eliminated status, boolean, not null
);
ALTER TABLE entries
ADD COLUMN additional_points FLOAT CHECK (additional_points >= 0 AND additional_points <= 50) NOT NULL;
--insert a record into entity <entries>
INSERT INTO entries (tournament_id, player_id, additional_points, eliminated)
VALUES (1, 3, 25, FALSE);
--updata data under additional_points column where entry_id = 1
UPDATE entries
SET additional_points = 50.5
WHERE entry_id = 1;
-------------------------------------------------------------------------------------------------------------------------
--create entity <rounds>
CREATE TABLE rounds(
round_id SERIAL PRIMARY KEY, --field for round ID, autoincrement, primary key
tournament_id INT REFERENCES tournaments(tournament_ID) ON DELETE CASCADE NOT NULL,
--field for tournament ID, foreign key, delete dependent records, not null
round_number INT NOT NULL --field for round number, integer, not null
);
--insert data into entity <rounds>
INSERT INTO rounds (tournament_id, round_number)
VALUES (1, 1);
-------------------------------------------------------------------------------------------------------------------------
--create entity <pairings>
CREATE TABLE pairings(
pairing_id SERIAL PRIMARY KEY, --field for pairing ID, autoincrement, primary key
round_id INT REFERENCES rounds(round_ID) ON DELETE CASCADE NOT NULL,
--field for round ID, foreign key, delete dependent records, not null
white_player_id INT REFERENCES players(player_ID) ON DELETE CASCADE,
--field for white player ID, foreign key, delete dependent records
black_player_id INT REFERENCES players(player_ID) ON DELETE CASCADE,
--field for black player ID, foreign key, delete dependent records
result VARCHAR(10) NOT NULL --field for result, 10 characters max, not null
);
-------------------------------------------------------------------------------------------------------------------------
--create entity <forbidden>
CREATE TABLE forbidden(
pair_id SERIAL PRIMARY KEY, --field for pair ID, autoincrement, primary key
player_1_id INT REFERENCES players(player_ID) ON DELETE CASCADE NOT NULL,
--field for 1st player ID, foreign key, delete dependent records, not null
player_2_id INT REFERENCES players(player_ID) ON DELETE CASCADE NOT NULL,
--field for 2nd player ID, foreign key, delete dependent records, not null
tournament_id INT REFERENCES tournaments(tournament_ID) ON DELETE CASCADE NOT NULL
--field for tournament ID, foreign key, delete dependent records, not null
);
-------------------------------------------------------------------------------------------------------------------------
--create entity <predefined>
CREATE TABLE predefined(
pair_id SERIAL PRIMARY KEY, --field for pair ID, autoincrement, primary key
white_player_id INT REFERENCES players(player_ID) ON DELETE CASCADE NOT NULL,
--field for white player ID, foreign key, delete dependent records, not null
black_player_id INT REFERENCES players(player_ID) ON DELETE CASCADE NOT NULL,
--field for black player ID, foreign key, delete dependent records, not null
tournament_id INT REFERENCES tournaments(tournament_ID) ON DELETE CASCADE NOT NULL
--field for tournament ID, foreign key, delete dependent records, not null
);
-------------------------------------------------------------------------------------------------------------------------
`SELECT players.player_id, players.name, players.rating, players.club, entries.additional_points, entries.eliminated
FROM players JOIN entries ON players.player_id = entries.player_id
WHERE entries.tournament_id = $1`
SELECT players.player_id, players.name, players.rating, players.club, entries.additional_points, entries.eliminated
FROM players JOIN entries ON players.player_id = entries.player_id
WHERE entries.tournament_id = 3
--joint selection from entities <tournaments>, <players> and <entries>
SELECT tournaments.name, players.name, players.rating, entries.score
FROM tournaments
--join entity <tournaments> with entity <entries> by tournament_id
JOIN entries ON tournaments.tournament_id = entries.tournament_id
--join entity <players> with entity <entries> by player_id
JOIN players ON entries.player_id = players.player_id;
CREATE TABLE predefined(
pair_id SERIAL PRIMARY KEY,
white_player_id INT REFERENCES players(player_ID) ON DELETE CASCADE NOT NULL,
blak_player_id INT REFERENCES players(player_ID) ON DELETE CASCADE NOT NULL,
tournament_id INT REFERENCES tournaments(tournament_ID) ON DELETE CASCADE NOT NULL
);
ALTER TABLE users
ADD COLUMN password VARCHAR(30) NOT NULL,
ADD COLUMN firstname VARCHAR(30) NOT NULL,
ADD COLUMN surname VARCHAR(30) NOT NULL;
ALTER TABLE predefined
DROP COLUMN blak_player_id,
DROP COLUMN tournament_id;
UP
ALTER TABLE tournaments
ADD COLUMN max_participants SMALLINT CHECK (max_participants > 0 AND max_participants <= 1000),
ADD COLUMN max_rounds SMALLINT CHECK (max_rounds > 0 AND max_rounds <= 1000);
ALTER TABLE predefined
ADD COLUMN black_player_id INT REFERENCES players(player_ID) ON DELETE CASCADE NOT NULL,
ADD COLUMN tournament_id INT REFERENCES tournaments(tournament_ID) ON DELETE CASCADE NOT NULL;
ALTER TABLE users
ADD COLUMN email VARCHAR(50) NOT NULL;
ALTER TABLE users
ALTER COLUMN username TYPE VARCHAR(50),
ALTER COLUMN password TYPE VARCHAR(50),
ALTER COLUMN firstname TYPE VARCHAR(50),
ALTER COLUMN surname TYPE VARCHAR(50);
INSERT INTO users (username, password, firstname, surname, email)
VALUES ('t', 'p', 'M', 'T', 'm@g.com');
num_rounds SMALLINT CHECK (num_rounds > 0 AND num_rounds <= 50) NOT NULL,
--field for total number of rounds, integer, not null, check is between 1 and 50
max_players SMALLINT CHECK (num_rounds > 0 AND num_rounds <= 1000) NOT NULL,
INSERT INTO tournaments (tournament_name, tournament_type, user_ID)
VALUES ('tournament_1', 'test_type', 8);
INSERT INTO tournaments (tournament_name, tournament_type, user_ID)
VALUES ('tournament_2', 'test_type', 8);
INSERT INTO tournaments (tournament_name, tournament_type, user_ID)
VALUES ('tournament_3', 'test_type', 8);
ALTER TABLE pairings
ADD COLUMN white_player_id INT REFERENCES players(player_ID) ON DELETE CASCADE,
ADD COLUMN black_player_id INT REFERENCES players(player_ID) ON DELETE CASCADE,
ADD COLUMN result VARCHAR(10);
ALTER TABLE pairings
DROP COLUMN white_player_id,
DROP COLUMN black_player_id,
DROP COLUMN result;
ALTER TABLE tournaments DROP CONSTRAINT tournaments_user_id_fkey;
ALTER TABLE tournaments
ADD CONSTRAINT tournaments_user_id_fkey
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE;
--alter table tournaments to add not null constraints to max_rounds and max_participants
ALTER TABLE tournaments
ALTER COLUMN max_rounds SET NOT NULL,
ALTER COLUMN max_participants SET NOT NULL;
CREATE TABLE test (
general_ID SERIAL PRIMARY KEY,
nick VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
number SMALLINT NOT NULL,
data jsonb NOT NULL
);
INSERT INTO test (nick, password, number, data)
VALUES ('MMM', 'pass', 10000, '{"key": "value", "key2": [1, 2, 3]}');
SELECT (COALESCE((score->'round1'->>'result')::float, 0) + COALESCE((score->'round2'->>'result')::float, 0)) AS total_points FROM entries WHERE entry_id = 34;
SELECT
p.white_player_id AS player_id,
COUNT(p.white_player_id) AS white_count,
0 AS black_count
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE r.tournament_id = 16 AND p.black_player_id IS NOT NULL
GROUP BY p.white_player_id
UNION ALL
SELECT
p.black_player_id AS player_id,
0 AS white_count,
COUNT(p.black_player_id) AS black_count
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE r.tournament_id = 16 AND p.black_player_id IS NOT NULL
GROUP BY p.black_player_id;
-------
SELECT
p.white_player_id AS player_id,
p.black_player_id AS opponent_id
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE r.tournament_id = 16 AND p.black_player_id IS NOT NULL
UNION ALL
SELECT
p.black_player_id AS player_id,
p.white_player_id AS opponent_id
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE r.tournament_id = 16 AND p.black_player_id IS NOT NULL;
pairings = {{white_player_id: *num*, white_player_name: "", white_player_rating: *num*, white_player_points: *num*, black_player_id: *num*, black_player_name: "", black_player_rating: *num*, black_player_points: *num*, result: ""}, ...}
-------------------------------------------------------------------------------------------------------------------------
UPDATE pairings
SET result = 'bye'
WHERE pairing_id = 7 OR pairing_id = 10;
SELECT
p.white_player_id AS player_id,
CASE
WHEN p.result = '1-0' THEN 1.0
WHEN p.result = '1/2-1/2' THEN 0.5
WHEN p.result = 'bye' THEN 2.0
ELSE 0.0
END AS points
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE r.tournament_id = 16 AND r.round_number < 3
UNION ALL
SELECT
p.black_player_id AS player_id,
CASE
WHEN p.result = '0-1' THEN 1.0
WHEN p.result = '1/2-1/2' THEN 0.5
WHEN p.result = 'bye' THEN 2.0
ELSE 0.0
END AS points
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE r.tournament_id = 16 AND r.round_number < 3 AND p.black_player_id iS NOT NULL;
SELECT
p.white_player_id AS player_id,
CASE
WHEN p.result = '1-0' THEN 1.0
WHEN p.result = '1/2-1/2' THEN 0.5
WHEN p.result = 'bye' THEN $1
ELSE 0.0
END AS points
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE r.tournament_id = $2 AND r.round_number < $3
UNION ALL
SELECT
p.black_player_id AS player_id,
CASE
WHEN p.result = '0-1' THEN 1.0
WHEN p.result = '1/2-1/2' THEN 0.5
WHEN p.result = 'bye' THEN $1
ELSE 0.0
END AS points
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
SELECT * FROM pairings
WHERE round_id = (
SELECT round_id
FROM rounds
WHERE tournament_id = 16
ORDER BY round_number DESC
LIMIT 1
)
AND result = '-'
SELECT p.pairing_id, p.white_player_id, p.black_player_id, p.round_id, r.round_number, p.result,
wp.name AS white_player_name, wp.rating AS white_player_rating,
bp.name AS black_player_name, bp.rating AS black_player_rating
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
JOIN players wp ON p.white_player_id = wp.player_id
LEFT JOIN players bp ON p.black_player_id = bp.player_id
WHERE p.round_id = 3 AND r.tournament_id = 1
--authorise pairings requests
SELECT pairings.pairing_id
FROM pairings
JOIN rounds ON pairings.round_id = rounds.round_id
WHERE rounds.tournament_id = 16
AND rounds.round_number = (
SELECT MAX(r.round_number)
FROM rounds r
WHERE r.tournament_id = 16
)
AND pairings.result != 'bye';
update tournaments
set status = 'initialised'
where tournament_id = 16;
SELECT type, max_rounds, COUNT(round_id)
FROM tournaments
JOIN rounds ON tournaments.tournament_id = rounds.tournament_id
WHERE tournaments.tournament_id = 17
GROUP BY type, max_rounds;
SELECT round_id FROM rounds WHERE tournament_id = 16 ORDER BY round_number DESC LIMIT 1;
alter table tournaments
add column status TEXT NOT NULL;
SELECT
p.white_player_id AS player_id,
CASE
WHEN p.result = '1-0' THEN 1.0
WHEN p.result = '1/2-1/2' THEN 0.5
WHEN p.result = 'bye' THEN 0.0
ELSE 0.0
END AS points
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE r.tournament_id = 16 AND r.round_number < 4
UNION ALL
SELECT
p.black_player_id AS player_id,
CASE
WHEN p.result = '0-1' THEN 1.0
WHEN p.result = '1/2-1/2' THEN 0.5
WHEN p.result = 'bye' THEN 0.0
ELSE 0.0
END AS points
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE r.tournament_id = 16 AND r.round_number < 4 AND p.black_player_id iS NOT NULL;
SELECT
p.white_player_id AS player_id,
p.black_player_id AS opponent_id
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE r.tournament_id = 16 AND p.black_player_id IS NOT NULL
UNION ALL
SELECT
p.black_player_id AS player_id,
p.white_player_id AS opponent_id
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE r.tournament_id = 16 AND p.black_player_id IS NOT NULL;
SELECT players.player_id, pairings.result
FROM pairings
JOIN entries ON players.player_id = entries.player_id
JOIN rounds ON pairings.round_id = rounds.round_id
WHERE rounds.tournament_id = 16 AND rounds.round_number = 1 AND players.player_id = 1;
SELECT pairings.result FROM pairings WHERE player_id = 13 ORDER BY round DESC LIMIT 1;
SELECT
p.white_player_id AS player_id,
CASE
WHEN p.result = '1-0' THEN 1.0
WHEN p.result = '1/2-1/2' THEN 0.5
WHEN p.result = 'bye' THEN 0.5
ELSE 0.0
END AS points
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE r.tournament_id = 23 AND r.round_number < 3
UNION ALL
SELECT
p.black_player_id AS player_id,
CASE
WHEN p.result = '0-1' THEN 1.0
WHEN p.result = '1/2-1/2' THEN 0.5
ELSE 0.0
END AS points
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE r.tournament_id = 23 AND r.round_number < 3 AND p.black_player_id iS NOT NULL;
SELECT
r.round_number,
p.result,
CASE
WHEN (p.white_player_id = $1 AND p.result = '1-0') OR
(p.black_player_id = $1 AND p.result = '0-1') THEN 'W'
WHEN (p.white_player_id = $1 AND p.result = '0-1') OR
(p.black_player_id = $1 AND p.result = '1-0') THEN 'L'
WHEN p.result = '1/2-1/2' THEN 'D'
WHEN p.result = 'bye' THEN 'B'
ELSE 'U'
END AS outcome
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE (p.white_player_id = $1 OR p.black_player_id = $1)
AND r.tournament_id = $2 AND r.round_number < $3
ORDER BY r.round_number ASC;
SELECT
r.round_number,
p.result,
p.white_player_id,
p.black_player_id,
CASE
WHEN (p.white_player_id = 17 AND p.result = '1-0') OR
(p.black_player_id = 17 AND p.result = '0-1') THEN 'W'
WHEN (p.white_player_id = 17 AND p.result = '0-1') OR
(p.black_player_id = 17 AND p.result = '1-0') THEN 'L'
WHEN p.result = '1/2-1/2' THEN 'D'
WHEN p.result = 'bye' THEN 'B'
ELSE 'U'
END AS outcome
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE (p.white_player_id = 17 OR p.black_player_id = 17)
AND r.tournament_id = 23 AND r.round_number < 6
ORDER BY r.round_number ASC;
SELECT pg_get_serial_sequence('users', 'user_id');
ALTER SEQUENCE public.predefined_pair_id_seq RESTART WITH 1;
SELECT
p.white_player_id AS player_id,
CASE
WHEN p.result = '1-0' THEN 1.0
WHEN p.result = '1/2-1/2' THEN 0.5
WHEN p.result = 'bye' THEN 3
ELSE 0.0
END AS points
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE r.tournament_id = 4 AND r.round_number < 2
UNION ALL
SELECT
p.black_player_id AS player_id,
CASE
WHEN p.result = '0-1' THEN 1.0
WHEN p.result = '1/2-1/2' THEN 0.5
ELSE 0.0
END AS points
FROM pairings p
JOIN rounds r ON p.round_id = r.round_id
WHERE r.tournament_id = 4 AND r.round_number < 2 AND p.black_player_id iS NOT NULL;