---
title: "Problem med Count(*) och join, räkna noll?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/152286-problem-med-count-och-join-räkna-noll"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Compusa"
published: "2006-10-09T12:37:05.000Z"
updated: "2006-10-09T13:47:30.000Z"
replies: 8
views: 675
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/152286-problem-med-count-och-join-räkna-noll"
---

# Problem med Count(*) och join, räkna noll?

## #1 — Compusa, 2006-10-09T12:37Z

Har följande SQL-query för att räkna antalet sålda biljetter till en viss flight som avgår ett visst datum.

```
SELECT Flight.FlightNr, Flight.DepDate,  COUNT(*)
FROM Flight
INNER JOIN Ticket ON Flight.FlightNr = Ticket.FlightNr
    AND Flight.DepDate = Ticket.DepDate
GROUP BY Flight.FlightNr, Flight.DepDate
```

Resultatet jag får av denna är exempelvis:
FLIGHTNR         DEPDATE	            COUNT
AF330	          01.03.2006	              1
BA801	          01.03.2006	              2

Alla flighter som avgår en viss dag och har minst en biljett sålda inkulderas i resultatet. Problemet är att jag skulle vilja få med även de flighter som inte har några biljetter sålda, dvs:

FLIGHTNR	DEPDATE	            COUNT
AF330	          06.03.2006	      0
AF330	          01.03.2006	      1
BA801	          01.03.2006	      2

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

## #2 — @nders, 2006-10-09T12:39Z

Prova med LEFT JOIN istället för INNER JOIN.

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

## #3 — Compusa, 2006-10-09T12:54Z

> **@nders skrev:**
>
> Prova med LEFT JOIN istället för INNER JOIN.

Tack @nders! Med en left join och att jag ändrade COUNT(\*) till COUNT(Ticket.FlightNr) så fungerar det :) 

```
SELECT Flight.FlightNr, Flight.DepDate,  COUNT(Ticket.FlightNr)
FROM Flight
LEFT JOIN Ticket ON Flight.FlightNr = Ticket.FlightNr
    AND Flight.DepDate = Ticket.DepDate
GROUP BY Flight.FlightNr, Flight.DepDate
```

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

## #4 — LarsG, 2006-10-09T12:56Z

och

```
COUNT(ticket.flightnr)
```

Red: Detta var tänkt som ett tillägg till @nders post.

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

## #5 — Compusa, 2006-10-09T13:02Z

Jag trodde det fungerade helt och hållet, men jag hade fel...

Om jag ändrar:

```
SELECT Flight.FlightNr, Flight.DepDate,  COUNT(Ticket.FlightNr)
FROM Flight
LEFT JOIN Ticket ON Flight.FlightNr = Ticket.FlightNr
    AND Flight.DepDate = Ticket.DepDate
GROUP BY Flight.FlightNr, Flight.DepDate
```

Till:

```
SELECT Flight.FlightNr, Flight.DepDate,  COUNT(Ticket.FlightNr)
FROM Flight
LEFT JOIN Ticket ON Flight.FlightNr = Ticket.FlightNr
    AND Flight.DepDate = Ticket.DepDate
WHERE Ticket.LookAfter = 'ja'
GROUP BY Flight.FlightNr, Flight.DepDate
```

Dvs, nu vill jag räkna antalet LookAfter med värdet 'ja' för varje flight. Nu utesluts dock de flight som inte har några LookAfter med värdet 'ja'. Hur ska jag bära mig åt för att även detta ska tas med i resultatet?

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

## #6 — LarsG, 2006-10-09T13:03Z

```
SELECT Flight.FlightNr, Flight.DepDate,  COUNT(Ticket.FlightNr)
FROM Flight
LEFT JOIN Ticket ON Flight.FlightNr = Ticket.FlightNr
    AND Flight.DepDate = Ticket.DepDate
    and Ticket.LookAfter = 'ja'
GROUP BY Flight.FlightNr, Flight.DepDate
```

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

## #7 — Compusa, 2006-10-09T13:23Z

> **LarsG skrev:**
>
> ```
> SELECT Flight.FlightNr, Flight.DepDate,  COUNT(Ticket.FlightNr)
> FROM Flight
> LEFT JOIN Ticket ON Flight.FlightNr = Ticket.FlightNr
>     AND Flight.DepDate = Ticket.DepDate
>     and Ticket.LookAfter = 'ja'
> GROUP BY Flight.FlightNr, Flight.DepDate
> ```

Perfekt! Har suttit och brottats med detta en lång stund idag och tänka sig att jag inte kom på att man skulle inkludera det i joinen. Hur som helst. Jag försökte bygga vidare på detta och alltså inkludera både:
antalet sålda biljetter (oavsett värde på LookAfter) och antalet sålda biljetter med LookAfter = ja.

Har försökt med:

```
SELECT Flight.FlightNr, Flight.DepDate,  COUNT(Ticket.FlightNr), COUNT(Ticket.FlightNr)
FROM Flight
LEFT JOIN Ticket ON Flight.FlightNr = Ticket.FlightNr
    AND Flight.DepDate = Ticket.DepDate AND Ticket.LookAfter = 'ja'
LEFT JOIN Ticket ON Flight.FlightNr = Ticket.FlightNr
    AND Flight.DepDate = Ticket.DepDate
GROUP BY Flight.FlightNr, Flight.DepDate
```

Men det fungerar naturligtvis inte :(

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

## #8 — LarsG, 2006-10-09T13:41Z

```
SELECT Flight.FlightNr, 
       Flight.DepDate,  
       COUNT(Ticket.FlightNr) as total,
       sum(case when Ticket.LookAfter = 'ja' then 1 else 0 end) as lookafter
  FROM Flight
  LEFT JOIN Ticket ON Flight.FlightNr = Ticket.FlightNr
   AND Flight.DepDate = Ticket.DepDate 
GROUP BY Flight.FlightNr, Flight.DepDate
```

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

## #9 — Compusa, 2006-10-09T13:47Z

Helt fantastiskt! Har aldrig använt mig av case, visste inte ens att det var möjligt med SQL. Stort tack LarsG och @nders.

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/152286-problem-med-count-och-join-räkna-noll
