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".
Databaser & SQLur Databashanterare & SQL
6 svar · 501 visningar · startad av Asa
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
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".
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.
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...
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;
Top 1 funkar inte i mitt fall.
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;