Avatar billede sorenmh Nybegynder
24. juli 2003 - 03:28 Der er 10 kommentarer og
1 løsning

Tæl resultater og adder dem med to selects i en query

Er det muligt at lave en forespørgsel i stil med denne:

SELECT ((tabel1.felt1+tabel1.felt2+tabel1.felt3)+(SELECT COUNT(*) FROM tabel2)) as summeret_tal FROM tabel1

Jeg kan ikke få det her til virke og jeg kan ikke lige finde ud af hvordan jeg ellers skal skrive den. Er der nogen der har et forslag?
Avatar billede bearhugx Nybegynder
24. juli 2003 - 03:32 #1
Mener at dette skulle kunne gøre det

SELECT (count(tb2.*)+tb1.felt1+tb1.felt2+tb1.felt2) as summeret_tal
FROM Tabel1 as tb1, Tabel2 as tb2;
Avatar billede sorenmh Nybegynder
24. juli 2003 - 03:32 #2
En lidt mere detaljeret udgave af den (og det som jeg virkelig er ude efter) følger her:

SELECT ((tabel1.felt1+tabel1.felt2+tabel1.felt3)+(SELECT COUNT(*) FROM tabel2 WHERE tabel1.felt1 = tabel2.felt1)) as summeret_tal FROM tabel1 ORDER BY summeret_tal DESC
Avatar billede bearhugx Nybegynder
24. juli 2003 - 03:35 #3
Igen - slå select'ne sammen

SELECT t1.felt1+t1.felt2+t1.felt3+count(t2.*) as summeret_tal
FROM Tabel1 AS t1, Tabel2 AS t2
WHERE t1.felt1 = t2.felt1
ORDER BY summeret_tal DESC;
Avatar billede sorenmh Nybegynder
24. juli 2003 - 03:47 #4
Den synes at have problemer med denne her:
COUNT(t2.*)

Den fungerer udemærket hvis man ikke har t2. med, men så kræver det jo at man kun har en tabel med i forespørgslen.
Avatar billede bearhugx Nybegynder
24. juli 2003 - 03:49 #5
hmm...
prøv med count(t2.felt1)
Avatar billede bearhugx Nybegynder
24. juli 2003 - 03:54 #6
fik du det til at virke ?
Avatar billede sorenmh Nybegynder
24. juli 2003 - 03:56 #7
My bad... Jeg sidder med MySQL 3.23... Jeg får ud fra at den ikke kan den slags.
Avatar billede sorenmh Nybegynder
24. juli 2003 - 04:04 #8
Ok, det funker faktisk det du skriver der... Meeen, den returnerer kun en post.
Avatar billede sorenmh Nybegynder
24. juli 2003 - 04:14 #9
SELECT t1.felt1+t1.felt2+t1.felt3+count(t2.felt1) as summeret_tal
FROM Tabel1 AS t1, Tabel2 AS t2
WHERE t1.felt1 = t2.felt1
ORDER BY summeret_tal DESC;

Det den gør nu er at den tæller alle poster i t2 og returnerer resultatet - et enkelt tal.

Sætningen skal vælge 30 poster fra t1 og for hver af de poster skal den vælge alle de poster fra t2 hvor t1.felt1 = t2.felt1 og tælle dem sammen addere nogle felter fra t1 og sortere dem efter summeret_tal.
Avatar billede sorenmh Nybegynder
24. juli 2003 - 05:07 #10
Problemet bestod i at den manglede en GROUP BY kommando. Det er løst nu.
Men min SQL sætning er så af gode grunde blevet ret tung i det.
Avatar billede bearhugx Nybegynder
24. juli 2003 - 11:03 #11
glad for at du fik det til at virke, i hvert fald
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester