---
title: "Count funkar inte om jag kör inner join?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/176579-count-funkar-inte-om-jag-kör-inner-join"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Melea"
published: "2009-01-28T22:35:29.000Z"
updated: "2009-01-29T16:52:06.000Z"
replies: 8
views: 412
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/176579-count-funkar-inte-om-jag-kör-inner-join"
---

# Count funkar inte om jag kör inner join?

## #1 — Melea, 2009-01-28T22:35Z

Okai,

Tycker detta borde funka.

```
select 
	s.sprint_id,
	s.sprint_topic, 
	s.sprint_text, 
	date_format(s.sprint_date, '%e %b %Y, %H:%i') as sprint_date,
	s.sprint_user_id,
	s.sprint_sort_order as prio,
	count(s.sprint_id) as siblings,
	u.user_name
from 
	" . tbl_SPRINT . " s
left join
	" . tbl_USER . " u on s.sprint_user_id = u.user_id
group by
	s.sprint_id
order by
	s.sprint_sort_order
```

Men counten funkar inte, varför?
Använder MySQL 5.0.41.
Ledsen för den korta tonen, suttit alldeles för länge med det här.

Tack på förhand!

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

## #2 — Melea, 2009-01-28T22:48Z

Tycker det här är konstigt.

Detta funkar

```
select 
	s.sprint_id,
	s.sprint_topic, 
	s.sprint_text, 
	date_format(s.sprint_date, '%e %b %Y, %H:%i') as sprint_date,
	s.sprint_user_id,
	s.sprint_sort_order as prio,
	count(s.sprint_id) as siblings,
	u.user_name
from 
	" . tbl_SPRINT . " s 
join
	" . tbl_SPRINT . " s2
left join
	" . tbl_USER . " u on (s.sprint_user_id = u.user_id)
group by
	s.sprint_id
order by
	s.sprint_sort_order
```

s2 gör ju ingenting, hur kan det göra någon skillnad? Förklara gärna. :)

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

## #3 — LarsG, 2009-01-29T08:46Z

Vad menar du med att det inte fungerar?

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

## #4 — Melea, 2009-01-29T08:50Z

Säg att jag har 3 poster i tabellen tbl_SPRINT, i mitt första inlägg returnerar prio endast 1, i mitt andra 3.

**/r** okej, rubriken på första inlägget är helt tokfel, döpte inlägget när jag hade ett annat fel, sorry för det. :)

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

## #5 — LarsG, 2009-01-29T12:11Z

Hur är tabellerna definierade? Vilka kolumner utgör primärnyckel? Ge exempel på datainnehåll och förväntat resultat.

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

## #6 — Melea, 2009-01-29T12:50Z

sprint_id - int primärnyckel
sprint_topic - varchar
sprint_text - longtext
sprint_date - datetime
sprint_user_id - int
sprint_sort_order - int

Vill hämta allt innehåll i tbl_SPRINTS, samt information om användaren genom att jämföra sprint_user_id med user_id i tbl_USER-tabellen, och jag vill att *prio* ska innehålla antal poster i tbl_SPRINTS.

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

## #7 — Melea, 2009-01-29T16:31Z

Okej, såhär ser SQL-frågan ut nu:

```
select
	s.sprint_id,
	s.sprint_topic, 
	s.sprint_text, 
	date_format(s.sprint_date, '%e %b %Y, %H:%i') as sprint_date,
	s.sprint_user_id,
	s.sprint_completed,
	s.sprint_prio,
	s.sprint_sort_order as sort_order,
	count(s.sprint_id) as siblings,
	u.user_name
from 
	" . tbl_SPRINT . " s 
join
	" . tbl_SPRINT . " s2
left join
	" . tbl_USER . " u on s.sprint_user_id = u.user_id
where
	s.sprint_completed = #
group by
	s.sprint_id
order by
	s.sprint_sort_order
```

Det jag vill få ut är alla poster i tbl_SPRINT där sprint_completed är 0, 1 eller 2, beroende på vad den får för värde. Jag vill också räkna alla poster som den skriver ut, dvs de där sprint_completed är 0, 1 eller 2.

Just nu räknar counten alla poster, oavsett vad det står i where-satsen, men den skriver ut innehållet korrekt.

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

## #8 — LarsG, 2009-01-29T16:38Z

prio? Menar du inte siblings?

Om vi tittar på din första fråga och bara använder kolumner sprint_id 
och säger att den har följande innehåll

sprint_id 

1         
2         
3

```
select sprint_id, count(sprint_id)
  from tbl_Sprint
 group by sprint_id
```

så ger det resultatet

1	1
2	1
3	1

om du har frågan 

```
select s.sprint_id,s2.sprint_id
  from tbl_Sprint s
  join tbl_sprint s2
```

så ger det resultatet

s.sprint_id s2.sprint_id

1           1
1           2
1           3
2           1
2           2
2           3
3           1
3           2
3           3

eftersom du kombinerar alla poster med alla poster i de båda tabellerna.

```
select s.sprint_id,count(s.sprint_id)
  from tbl_Sprint s
  join tbl_sprint s2
 group by s.sprint_id
```

så ger det resultatet 

1	3
2	3
3	3

eftersom du har tre förekomster av varje s.sprint_id

Om du för varje rad i resultatet även vill ha totala antalet rader i tbl
så kan du skriva

```
select s.sprint_id,
       s.sprint_topic, 
       s.sprint_text, 
       date_format(s.sprint_date, '%e %b %Y, %H:%i') as sprint_date,
       s.sprint_user_id,
       s.sprint_sort_order as prio,
       (select count(*)  from tbl_sprint) as siblings,
       u.user_name
  from tbl_SPRINT s
  left join tbl_USER u on s.sprint_user_id = u.user_id
 order by s.sprint_sort_order
```

Grundproblemet är att mysql's implementation av group by tillåter sqlfrågor som inte är entydiga.

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

## #9 — Melea, 2009-01-29T16:52Z

Du är en klippa, som alltid.

```
select
	s.sprint_id,
	s.sprint_topic, 
	s.sprint_text, 
	date_format(s.sprint_date, '%e %b %Y, %H:%i') as sprint_date,
	s.sprint_user_id,
	s.sprint_completed,
	s.sprint_prio,
	s.sprint_sort_order as sort_order,
	(select count(*)  from " . tbl_BACKLOG . " where backlog_completed = :backlog_completed) as siblings,
	u.user_name
from 
	" . tbl_SPRINT . " s 
left join
	" . tbl_USER . " u on s.sprint_user_id = u.user_id
where
	s.sprint_completed = :backlog_completed
order by
	s.sprint_sort_order
```

Funkar klockrent!  :bire

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/176579-count-funkar-inte-om-jag-kör-inner-join
