---
title: "Räknar fel!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/130070-räknar-fel"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "k0ffe"
published: "2005-06-16T09:33:08.000Z"
updated: "2005-06-23T12:42:53.000Z"
replies: 16
views: 537
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/130070-räknar-fel"
---

# Räknar fel!

## #1 — k0ffe, 2005-06-16T09:33Z

Halloj, jag har en SQL-fråga som jag tycks behöva lite hjälp med.
Det är ett forum, där alla poster visas samt hur många svar respektive har. Men om en post inte har något svar, så skriver den ut posten med en "1" som antal svar ändå?

```
SELECT forum.*, anvandare.bild, count(*) as antalsvar FROM forum LEFT JOIN forum_svar ON forum.FID=forum_svar.SID INNER JOIN anvandare ON forum.anvID=anvandare.ID GROUP BY forum.FID ORDER BY forum.senasteSvar desc
```

Hade tidigare INNER JOIN istället för LEFT, men då visades ingen post alls som inte hade något svar...

```
SELECT forum.*, anvandare.bild, count(*) as antalsvar FROM forum INNER JOIN forum_svar ON forum.FID=forum_svar.SID INNER JOIN anvandare ON forum.anvID=anvandare.ID GROUP BY forum.FID ORDER BY forum.senasteSvar desc
```

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

## #2 — LarsG, 2005-06-16T09:40Z

```
count(anvandare.id)
```

Så där kan du inte använda group by. Alla kolumner i select-listan som inte ingår i en aggregatfunktion måste vara med i group by.

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

## #3 — k0ffe, 2005-06-16T09:45Z

Tack!

Hur menar du med group by?

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

## #4 — k0ffe, 2005-06-16T09:48Z

Det fungerar inte ändå :(

```
SELECT forum.*, anvandare.bild, count(anvandare.id) as antalsvar FROM forum LEFT JOIN forum_svar ON forum.FID=forum_svar.SID INNER JOIN anvandare ON forum.anvID=anvandare.ID GROUP BY forum.FID ORDER BY forum.senasteSvar desc
```

EDIT: count(forum_svar.ID) skulle det vara.

Utveckla gärna det med group by LarsG

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

## #5 — @nders, 2005-06-16T09:50Z

Som LarsG skrev, alla kolumner i SELECT-listan måste vara i GROUP BY, förutom de som är aggregatfunktioner (ex. COUNT(), SUM(), AVG()).

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

## #6 — k0ffe, 2005-06-16T10:16Z

Ok, men varför måste dom det?
Nu har jag ju alla kolumner (\*) med  i SELECT, måste jag då skriva ut alla i GROUP BY, t.ex forum.rubrik, forum.inlagg, forum.datum osv... ?

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

## #7 — LarsG, 2005-06-16T10:41Z

```

C1 C2
-------
1   2
1   3

select c1,c2 from t group by c1
```

vilket värde från kolumn c2 vill du ha?

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

## #8 — k0ffe, 2005-06-16T11:07Z

:) vad menar du?

Jag ville bara ha en förklaring till vad GROUP BY faktiskt gör...

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

## #9 — LarsG, 2005-06-16T11:28Z

Group by innebär att om det finns flera värden som är lika i en kolumn så kombineras dessa till en rad.  Med hjälp av aggregatfunktioner (sum etc) kan man utföra beräkningar inom varje grupp. I ovanstående exempel så borde en post returneras, då det finns en grupp av värden i c1 men hur skall då databashanteraren veta vilket av de värden som finns i kolumnen c2 som skall returneras? Därför säger alla DBMS (utom mysql som returnerar ett godtyckligt värde) att en sådan fråga inte är förutsägbar.

Om du gör group by på alla kolumner i select-listan och inte har någon aggregatfunktion så fungerar group by på samma sätt som distinct, dvs den tar bort duplikat från resultatet.

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

## #10 — k0ffe, 2005-06-16T13:14Z

Ok, tack. Men hur blir det då i mitt fall? 
Den kolumn som kan innehålla identisk data är ju forum_svar.SID, som håller reda på vilket forum det tillhör...

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

## #11 — k0ffe, 2005-06-17T08:47Z

LarsG?

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

## #12 — LarsG, 2005-06-17T16:55Z

```
SELECT forum.*, 
anvandare.bild, 
(select count(*) 
  from forum_svar
where sid = FID) as antalsvar
from forum 
INNER JOIN anvandare ON forum.anvID=anvandare.ID ORDER BY forum.senasteSvar desc
```

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

## #13 — k0ffe, 2005-06-18T18:54Z

Tack för all hjälp!

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

## #14 — @nders, 2005-06-19T05:48Z

[Hur markerar jag vilket svar som löste mitt problem?](http://www.webforum.nu/misc.php?s=&action=faq&page=2#status)

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

## #15 — k0ffe, 2005-06-23T10:18Z

LarsG, den fungerar inte! Men kan det ha med mySQL-versionen att göra? Läste en annan tråd som fick samma fel, nämlingen:

```
ERROR [42000] [MySQL][ODBC 3.51 Driver][mysqld-4.0.16-log]You have an error in your SQL syntax. 
Check the manual that corresponds to your MySQL server version for the right syntax to use 
near 'select count(*) from forum_svar where SID = forum.FID) as antal
```

Hela frågan ser ut såhär:

```
"SELECT forum.*, anvandare.bild, (select count(*) from forum_svar where SID = forum.FID) as antalsvar from forum INNER JOIN anvandare ON forum.anvID=anvandare.ID ORDER BY forum.senasteSvar desc"
```

Eftersom jag har Loopia som webbhotell, kan jag ju inte påverka versionen av mySQL, om det nu är det som är felet vill säga?

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

## #16 — LarsG, 2005-06-23T10:44Z

Jo, det beror på versionen av MYSQL. Då får du använda varianten med group by.

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

## #17 — k0ffe, 2005-06-23T12:42Z

Alltså denna? 

```
"SELECT forum.*, anvandare.bild, count(forum_svar.id) as antalsvar FROM forum LEFT JOIN forum_svar ON forum.FID=forum_svar.SID INNER JOIN anvandare ON forum.anvID=anvandare.ID GROUP BY forum.FID ORDER BY forum.senasteSvar desc"
```

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/130070-räknar-fel
