тест5

This commit is contained in:
2026-05-25 12:26:42 +03:00
parent 6c449ef7df
commit 18bac0d12d

View File

@@ -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,95 @@ 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()