каждый гол пишется отдельной строкой
This commit is contained in:
@@ -333,7 +333,10 @@ WHERE m.match_id = %s;
|
|||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
|
|
||||||
def get_vmix_players_goal(match_id: int):
|
def get_vmix_players_goal2(match_id: int):
|
||||||
|
"""запрос для получения игроков, забивших голы, с указанием минут и типа гола (основной, пенальти, автогол)
|
||||||
|
Иванов 23', 25' (дубли пишуться вместе)
|
||||||
|
"""
|
||||||
query = """
|
query = """
|
||||||
WITH goal_events AS (
|
WITH goal_events AS (
|
||||||
SELECT
|
SELECT
|
||||||
@@ -423,3 +426,96 @@ ORDER BY COALESCE(h.rn, a.rn);
|
|||||||
return cur.fetchall()
|
return cur.fetchall()
|
||||||
finally:
|
finally:
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
|
|
||||||
|
def get_vmix_players_goal(match_id: int):
|
||||||
|
"""запрос для получения игроков, забивших голы, с указанием минут и типа гола (основной, пенальти, автогол)
|
||||||
|
Каждый гол в отдельной строке, дубли по игроку не объединяются
|
||||||
|
"""
|
||||||
|
query = """
|
||||||
|
WITH goal_events AS (
|
||||||
|
SELECT
|
||||||
|
meu.side,
|
||||||
|
COALESCE(p.last_name, meu.player_name) AS last_name,
|
||||||
|
meu.seconds,
|
||||||
|
meu.id,
|
||||||
|
meu.type,
|
||||||
|
CASE
|
||||||
|
WHEN EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM match_events_ui m2
|
||||||
|
WHERE m2.match_id = meu.match_id
|
||||||
|
AND m2.type = 'period_start_2h'
|
||||||
|
AND m2.seconds <= meu.seconds
|
||||||
|
) THEN 2
|
||||||
|
WHEN EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM match_events_ui m2
|
||||||
|
WHERE m2.match_id = meu.match_id
|
||||||
|
AND m2.type = 'period_start_1h'
|
||||||
|
AND m2.seconds <= meu.seconds
|
||||||
|
) THEN 1
|
||||||
|
ELSE NULL
|
||||||
|
END AS period_no
|
||||||
|
FROM match_events_ui meu
|
||||||
|
LEFT JOIN players p ON p.id = meu.player_id
|
||||||
|
WHERE meu.match_id = %s
|
||||||
|
AND meu.type IN ('goal', 'penalty', 'own_goal')
|
||||||
|
),
|
||||||
|
goal_rows AS (
|
||||||
|
SELECT
|
||||||
|
side,
|
||||||
|
last_name,
|
||||||
|
seconds,
|
||||||
|
id,
|
||||||
|
last_name || ' ' ||
|
||||||
|
(
|
||||||
|
CASE
|
||||||
|
WHEN period_no = 1 AND seconds > 2700
|
||||||
|
THEN '45''' || '+' || ((seconds - 2700) / 60)::int::text
|
||||||
|
|
||||||
|
WHEN period_no = 2 AND seconds > 5400
|
||||||
|
THEN '90''' || '+' || ((seconds - 5400) / 60)::int::text
|
||||||
|
|
||||||
|
WHEN period_no = 2
|
||||||
|
THEN (46 + ((seconds - 2700) / 60)::int)::text || ''''
|
||||||
|
|
||||||
|
ELSE (1 + (seconds / 60)::int)::text || ''''
|
||||||
|
END
|
||||||
|
) ||
|
||||||
|
CASE
|
||||||
|
WHEN type = 'own_goal' THEN ' (АГ)'
|
||||||
|
WHEN type = 'penalty' THEN ' (П)'
|
||||||
|
ELSE ''
|
||||||
|
END AS player_goal
|
||||||
|
FROM goal_events
|
||||||
|
),
|
||||||
|
home_rows AS (
|
||||||
|
SELECT
|
||||||
|
ROW_NUMBER() OVER (ORDER BY seconds, id, last_name) AS rn,
|
||||||
|
player_goal AS player_name1
|
||||||
|
FROM goal_rows
|
||||||
|
WHERE side = 'home'
|
||||||
|
),
|
||||||
|
away_rows AS (
|
||||||
|
SELECT
|
||||||
|
ROW_NUMBER() OVER (ORDER BY seconds, id, last_name) AS rn,
|
||||||
|
player_goal AS player_name2
|
||||||
|
FROM goal_rows
|
||||||
|
WHERE side = 'away'
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
COALESCE(h.player_name1, '') AS player_name1,
|
||||||
|
COALESCE(a.player_name2, '') AS player_name2
|
||||||
|
FROM home_rows h
|
||||||
|
FULL OUTER JOIN away_rows a ON a.rn = h.rn
|
||||||
|
ORDER BY COALESCE(h.rn, a.rn);
|
||||||
|
"""
|
||||||
|
|
||||||
|
conn = get_connection()
|
||||||
|
try:
|
||||||
|
with conn.cursor() as cur:
|
||||||
|
cur.execute(query, (match_id,))
|
||||||
|
return cur.fetchall()
|
||||||
|
finally:
|
||||||
|
conn.close()
|
||||||
|
|||||||
Reference in New Issue
Block a user