---
title: "Ta fram insläppta mål"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/127478-ta-fram-insläppta-mål"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Obbelix"
published: "2005-05-02T12:27:41.000Z"
updated: "2005-09-10T13:00:11.000Z"
replies: 4
views: 388
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/127478-ta-fram-insläppta-mål"
---

# Ta fram insläppta mål

## #1 — Obbelix, 2005-05-02T12:27Z

Hej.

Undrar om det går i en å samma sql-sats få fram antal mål en målvakt släppt in under den tid han/hon stod i mål.
Har i "händelse" tabellen olika typer av händelser, mål, utvining, målvaktsbyte osv.
När matchen börjar skapas en post "gk in" och sen id:t på aktuell målvakt. Om sen det blir byte får utgående målvakt "gk out" osv.

Nu vill jag ta fram om det blivit några mål under tiden just den målvakten stod.
Tabellen ser ut ungefär såhär

```
game_id | period | time_min | time_sec | player_id | action_type
-----------------------------------------------------------------
25        1        00         00         --          Game start
25        1        00         00         77          GK in
25        1        04         03         55          Goal
25        2        10         20         77          GK out
25        2        10         20         88          GK in
25        3        20         00         88          GK out
25        3        20         00         --          Game end
```

Det jag vill ha ut är att målvakt (player_id) 77 har släppt in ett mål och att målvakt 88 släppt in 0 mål.
Har idag inte att målvakterna "går in" i varje period, men det kanske är nödvändigt?

Permalänk: https://www.webforum.nu/p/127478

## #2 — LarsG, 2005-05-02T12:59Z

```
select count(*)
from events e
where action_type = 'Goal'
and exists(
select * 
from events
where action = 'GK in'
and ( period < e.period
or (period = e.perid and time_min < e.time_min)
or (period = e.perid and time_min = e.time_min 
  and time_sec < e.time_sec))
and player_id = 77)
and not exists(
select * 
from events
where action = 'GK out'
and ( period < e.period
or (period = e.perid and time_min < e.time_min)
or (period = e.perid and time_min = e.time_min 
  and time_sec < e.time_sec))
and player_id = 77)
```

Permalänk: https://www.webforum.nu/p/1604892

## #3 — Obbelix, 2005-05-02T16:21Z

Oj, det var ingen kort sql-sats, men den verkar funka som den ska :)
Jag tackar!

Permalänk: https://www.webforum.nu/p/1604980

## #4 — Obbelix, 2005-09-09T16:21Z

Drar upp denna tråd igen då det inte fungerar som det ska...

har denna fråga:

```
SELECT COUNT(*) FROM game_data gd 
WHERE gd.action_type = 'Goal' 
AND gd.game_id=645
AND NOT gd.team_id=97
AND EXISTS(
SELECT * FROM game_data 
WHERE action_type = 'GK in' 
AND (period < gd.period 
OR (period = gd.period AND period_time_min < gd.period_time_min) 
OR (period = gd.period AND period_time_min = gd.period_time_min 
AND period_time_sec < gd.period_time_sec))
AND player_id = 1153) 
AND NOT EXISTS(
SELECT * FROM game_data 
WHERE action_type = 'GK out' 
AND (period < gd.period 
OR (period = gd.period AND period_time_min < gd.period_time_min) 
OR (period = gd.period and period_time_min = gd.period_time_min 
AND period_time_sec < gd.period_time_sec))
AND player_id = 1153)
```

Har lagt till två argument i frågan jämfört med hur den såg ut från början. Dessa två gör så att den tar rätt match samt att den inte ska räkna mål som det egna laget gjort.

Denna kod borde ha gett 7 som resultat men dessvärre blir det 0.
Har ju inte "gk out" i slutet av matcherna, det kanske är nödvändigt?

Permalänk: https://www.webforum.nu/p/1670270

## #5 — Obbelix, 2005-09-10T13:00Z

Har nu rotat lite mer i detta och kommit fram till att det är bara de matcher som innehåller målvaktsbyte som räknar fel. ett exempel:

```
game_id | period | time_min | time_sec | player_id | action_type
-----------------------------------------------------------------
25        1        00         00         --          Game start
25        1        00         00         77          GK in
25        1        04         03         55          Goal
25        1        04         03         55          Goal
25        2        10         20         77          GK out
25        2        10         20         88          GK in
25        2        11         07         55          Goal
25        3        20         00         88          GK out
25        3        20         00         --          Game end
```

Rätt resultat av ovanstående SQL-fråga borde bli att målvakt 77 har släppt in 2 mål och målvakt 88 släppt in 1 mål.
Resultatet blir dessvärre att målvakt 88 släppt in 3 mål. 
Målvakt 77 räknar den rätt på så den får 2 mål.

Permalänk: https://www.webforum.nu/p/1670503

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/127478-ta-fram-insläppta-mål
