webForumDet fria alternativet

Lite problem

Databaser & SQLur Databashanterare & SQL

6 svar · 501 visningar · startad av Asa

Medlem sedan dec. 20011 860 inlägg
Frågan#1

Har en shop där jag nu vill visa lite statistik och då vill jag visa den dyraste order och dess summa. Jag kommer även sen hämta med namn m.m men det jag inte förstår är hur jag hämtar ut den med högsta värdet. Har ej sql sträng som hämtar alla och skriver ut.

Select ord.ordernr, sum(ord.antal*p.pris) as total
From orderrad ord, produkt p
Where ord.artnr=p.artnr
group by ord.ordernr;

Tabellerna

orderrad:
 - oID
 - ordernr
 - artnr
 - antal

produkt:
 - artnr
 - namn
 - pris
Medlem sedan mars 20034 471 inlägg
#2

Pröva:

SELECT max(total) FROM (
   Select ord.ordernr, sum(ord.antal*p.pris) as total
   From orderrad ord, produkt p
   Where ord.artnr=p.artnr
   group by ord.ordernr
) AS F;

Notera att du MÅSTE döpa subuttrycket i FROM-klausulen! Tex till "F".

Medlem sedan dec. 20011 860 inlägg
#3

Funkar perfekt men det skriver inte ut ordernummer. Hur gör jag det oxå? Har testat en massa men får det ej att funka.

Medlem sedan mars 20034 471 inlägg
#4

Tyvärr måste du trassla för att få det att funka, du kan inte plocka ut ett aggregerande värde ihop med en vanlig kolumn utan att gruppera på den vanliga kolumnen. Och du vill ju få ut max-värdet för alla, inte maxvärdet per order. Man kan göra på lite olika sätt:

CREATE VIEW Totalpris (ordernr, total) AS   -- eller använd temptabell
Select ord.ordernr, sum(ord.antal*p.pris)
From orderrad ord, produkt p
Where ord.artnr=p.artnr
group by ord.ordernr

SELECT ordernr, total 
FROM Totalpris
WHERE total = (SELECT max(total) FROM Totalpris)

DROP VIEW Totalpris -- Om du inte vill ha den kvar...
Medlem sedan dec. 20025 483 inlägg
#5
Select top 1 ord.ordernr, sum(ord.antal*p.pris) as total
From orderrad ord, produkt p
Where ord.artnr=p.artnr
group by ord.ordernr
order by 2 desc;
Medlem sedan dec. 20011 860 inlägg
#6

Top 1 funkar inte i mitt fall.

Medlem sedan dec. 20025 483 inlägg
#7

Asa skrev:

Top 1 funkar inte i mitt fall.

Därför att? Är det en annan DBMS får du väl använda motsvarigheten, t.ex. LIMIT i MySQL:

Select ord.ordernr, sum(ord.antal*p.pris) as total
From orderrad ord, produkt p
Where ord.artnr=p.artnr
group by ord.ordernr
order by 2 desc
limit 1;
132 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)