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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user