Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


SQL frågan summerar inte dubbleter

Postades av 2006-05-24 20:00:19 - Alexander Av Ekenstam, i forum access, Tråden har 8 Kommentarer och lästs av 796 personer

Använder mig av en MySQL server och följande fråga för att summera pricet på valda produketers ID

<code>SELECT SUM(price) FROM prod WHERE id IN (1,1,2,3)</code>

Fungerar fint men, som sakt den summerar inte dubbletterna.

Några ideér?


Tack i förhand! :)


Svara

Sv: SQL frågan summerar inte dubbleter

Postades av 2006-05-24 20:14:24 - Thomas Vanhaniemi

Det beror på att den helt enkelt bara tar ut en etta, alltså blir din SQL sats samma som
<code>
SELECT SUM(price) FROM prod WHERE id IN (1,2,3)
</code>
Du måste se till att du får unika rader vid frågan.
Antar att du vill summera totalpriset för ett antal produkter, men du måste göra detta på annat sätt i detta fall.


Svara

Sv:SQL frågan summerar inte dubbleter

Postades av 2006-05-24 20:38:18 - Niklas Jansson

Borde inte det gå med en join?
Släng in grejerna i en annan tabell, gör join på dem med ursprungliga och ta sum() på dem då.


Svara

Sv:SQL frågan summerar inte dubbleter

Postades av 2006-05-24 21:07:07 - Alexander Av Ekenstam

Så vid IN (1,2...) får det bara vara unika värden?

Körde en while loop innan för att räkna ihop, men det var kanske inte så effektivt. Kan också säga att kör i språket PHP.

Om nu vara unika värden kan finnas i IN(...) hur kan man då lösa det på ett effektivare sätt?


Min kod kanske också hjälper?
<code>
//Exempel...
//$vProd = array(1, 1, 2, 3, 4);
//
$sql = "SELECT SUM(price) AS summa FROM prod WHERE id IN (".implode(', ', $vProd).")";
$r = mysql_fetch_assoc($result);
$summa = $r['summa'];
</code>


Svara

Sv: SQL frågan summerar inte dubbleter

Postades av 2006-05-24 22:07:47 - Niklas Jansson

Alltså, det är inte det att det är unika värden i IN(...) som är problemet.

Tänk dig att du har en lista:

1
2
3
4
5
6
7
8

Och så anropar du
SELECT * FROM x WHERE id IN (1, 2, 3);
Det som händer då är ju i princip att sin SQL-server letar igenom listan, kollar om varje rad passar uppfyller villkoren, och - i så fall - lägger till den i sin retur. Raderna som matchar är 1, 2, och 3.

Om du istället gör anropet
SELECT * FROM x WHERE id IN (1, 1, 1, 1, 1, 2, 3);
Så kommer fortfarande raderna 1, 2, och 3 att matcha.

Alltså får du antingen välja varje för sig som du gör, eller så att säga välja "åt andra hållet". Alltså att du utgår från din lista med 1, 1, ..., och sen väljer ut de raderna som passar in på det i din ursprungliga tabell.

Dvs något i stil med:
INSERT INTO temp(id) VALUES (1);
INSERT INTO temp(id) VALUES (1);
INSERT INTO temp(id) VALUES (2);
INSERT INTO temp(id) VALUES (3);

(Vilket du lämpligtvis gör i en loop.)
Och sen något i stil med:

SELECT SUM(price) FROM (prod NATURAL JOIN temp);


Svara

Sv:SQL frågan summerar inte dubbleter

Postades av 2006-05-25 14:50:42 - Peter Ilis

Dubbelpost..


Svara

Sv:SQL frågan summerar inte dubbleter

Postades av 2006-05-25 14:53:38 - Peter Ilis

Nått liknande denna kan du ju skriva också:
<code>
select
(SELECT SUM(job_ID) from Employee where job_ID=13) +
(SELECT SUM(job_ID) from Employee where job_ID=14) +
(SELECT SUM(job_ID) from Employee where job_ID=14)
</code>
eller
<code>
select
SUM(
CASE
WHEN job_ID=13 THEN job_id
ELSE 0
END
)
+
SUM(
CASE
WHEN job_ID=14 THEN job_id
ELSE 0
END
)
+
SUM(
CASE
WHEN job_ID=14 THEN job_id
ELSE 0
END
)
from Employee
</code>


Du slipper då loopar och temp-tabeller. Men jag ingen aning om om det blir effektivare.. ;)

Mvh
Peter


Svara

Sv: SQL frågan summerar inte dubbleter

Postades av 2006-05-25 16:38:30 - Niklas Jansson

En loop lär man ju behöva ändå när man ska generera frågan, men man slipper loopade sql-anrop.


Svara

Sv: SQL frågan summerar inte dubbleter

Postades av 2006-05-25 18:43:05 - Johan Djupmarker

Jag har känslan av att MySQL fixar det snabbar med UNION istället för flera subselect.

SELECT SUM(price) AS summa FROM (
SELECT price FROM prod WHERE id =1
UNION ALL SELECT price FROM prod WHERE id =1
UNION ALL SELECT price FROM prod WHERE id =1
UNION ALL SELECT price FROM prod WHERE id =2
UNION ALL SELECT price FROM prod WHERE id =3)


/Johan


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 615
27 953
271 709
5 777
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies