fix: exclude own goals from player goal counts and hat-trick detection

COUNT(*) was counting own goals in the player's goal tally. Changed to
SUM(CASE WHEN NOT is_own_goal THEN 1 ELSE 0 END) in all five places:
topScorers, player, search players, Tournament.topScorers, and hatTricks.
The HAVING clause for hat-tricks is also corrected.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-17 08:16:41 +02:00
parent 1ebe4613ce
commit 0d415baf95
+6 -6
View File
@@ -184,7 +184,7 @@ export const resolvers = {
SELECT
g.player_name,
g.team_id,
COUNT(*)::int AS goals,
SUM(CASE WHEN NOT g.is_own_goal THEN 1 ELSE 0 END)::int AS goals,
SUM(CASE WHEN g.is_penalty THEN 1 ELSE 0 END)::int AS penalties,
SUM(CASE WHEN g.is_own_goal THEN 1 ELSE 0 END)::int AS own_goals,
COUNT(DISTINCT m.tournament_year)::int AS tournaments
@@ -210,7 +210,7 @@ export const resolvers = {
SELECT
g.player_name,
g.team_id,
COUNT(*)::int AS goals,
SUM(CASE WHEN NOT g.is_own_goal THEN 1 ELSE 0 END)::int AS goals,
SUM(CASE WHEN g.is_penalty THEN 1 ELSE 0 END)::int AS penalties,
SUM(CASE WHEN g.is_own_goal THEN 1 ELSE 0 END)::int AS own_goals,
COUNT(DISTINCT m.tournament_year)::int AS tournaments
@@ -240,7 +240,7 @@ export const resolvers = {
g.player_name,
g.team_id,
g.match_id,
COUNT(*)::int AS goals,
SUM(CASE WHEN NOT g.is_own_goal THEN 1 ELSE 0 END)::int AS goals,
m.tournament_year AS year,
m.round,
CASE WHEN m.team1_id = g.team_id THEN m.team2_id ELSE m.team1_id END AS opponent_id
@@ -248,7 +248,7 @@ export const resolvers = {
JOIN matches m ON g.match_id = m.id
WHERE m.is_quali_playoff = false ${conditions}
GROUP BY g.player_name, g.team_id, g.match_id, m.tournament_year, m.round, m.team1_id, m.team2_id
HAVING COUNT(*) >= 3
HAVING SUM(CASE WHEN NOT g.is_own_goal THEN 1 ELSE 0 END) >= 3
ORDER BY goals DESC, m.tournament_year DESC
`)
return Promise.all(rows.map(async (r: Record<string, unknown>) => ({
@@ -411,7 +411,7 @@ export const resolvers = {
db.select().from(teams).where(or(ilike(teams.name, q), ilike(teams.fifaCode!, q))).limit(8),
db.execute(sql`
SELECT g.player_name, g.team_id,
COUNT(*)::int AS goals,
SUM(CASE WHEN NOT g.is_own_goal THEN 1 ELSE 0 END)::int AS goals,
SUM(CASE WHEN g.is_penalty THEN 1 ELSE 0 END)::int AS penalties,
SUM(CASE WHEN g.is_own_goal THEN 1 ELSE 0 END)::int AS own_goals,
COUNT(DISTINCT m.tournament_year)::int AS tournaments
@@ -444,7 +444,7 @@ export const resolvers = {
async topScorers(parent: { year: number }, { limit = 10 }: { limit?: number }) {
const rows = await db.execute(sql`
SELECT g.player_name, g.team_id,
COUNT(*)::int AS goals,
SUM(CASE WHEN NOT g.is_own_goal THEN 1 ELSE 0 END)::int AS goals,
SUM(CASE WHEN g.is_penalty THEN 1 ELSE 0 END)::int AS penalties,
SUM(CASE WHEN g.is_own_goal THEN 1 ELSE 0 END)::int AS own_goals,
1 AS tournaments