webForumDet fria alternativet

"Bestseller" prob.

15 svar · 853 visningar · startad av Doja

DojaMedlem sedan apr. 20099 inlägg
#1

Antagligen en sjukt lätt fråga för er masters, men jag har testat så många olika alt. nu så...

Jag vill få nedanstående SQLfråga sorterad på "Total_Quantity".

'Select ProductID,Name,SUM(Quantity) AS "Total_Quantity" from orders_details GROUP BY ProductID,Name';

Man kan få den sorterad på (ORDER BY) Name & ProductID, men jag vill ju ha den med flest sålda överst...

Hur gör jag?

@ndersMedlem sedan juni 200032 969 inlägg
#2

Du skriver inte vad du använder för dbms, men hade det varit Microsoft SQL Server hade jag skrivit så här:

Select ProductID, Name, SUM(Quantity) AS Total_Quantity 
from orders_details 
GROUP BY ProductID, Name 
ORDER BY 3 DESC

Funkar nog i Access också - men i andra dbms vet jag inte. Kanske man kan använda Total_Quantity i order by i vissa dbms.

DojaMedlem sedan apr. 20099 inlägg
#3

Underbart! Tack så mycket! Funkar perf.!

@ndersMedlem sedan juni 200032 969 inlägg
#4

Vasse! Och välkommen hit! :bire

DojaMedlem sedan apr. 20099 inlägg
#5

"månadens" Bestseller

Hej igen!

Jag vill plocka datum från en annan tabell (orders.Levererad), så jag har skrivit ihop något som liknar det jag vill åstakomma, förutom att jag inte vill GROUP BY OrderID (som jag måste ha för kopplingens skull) & Levererad.

Jag får inte unika ProductID med OrderID & Levererad, men utan dem får jag felmeddelande...

Såhär ser koden ut f.n.:

SELECT d.ProductID, d.Name, d.OrderID,  o.OrderID, o.Levererad, SUM(d.Quantity) AS "Total_Quantity" 
FROM orders_details d, orders o 
WHERE d.OrderID = o.OrderID AND o.Levererad LIKE '%2009-03%' 
GROUP BY ProductID, d.Name, d.OrderID,  o.OrderID, o.Levererad ORDER BY 6 DESC

(anv. Microsoft Access)

LaspMedlem sedan juli 200012 980 inlägg
#6

Hej Doja och välkommen till wF!
Är det inte så att de exemple du anger är kurslitteratur och därmed Skollösningar som du är ute efter?
Tror du att du blir attraktiv hos arbetsgivare om du talar om att andra har gjort ditt jobb?

DojaMedlem sedan apr. 20099 inlägg
#7

Skollösningar? :) Är det så enkelt, eller är det fint uppställt? ;)

Nä, jag är ganska nybörjare på SQL, och har sökt lite runt om på nätet, men inte hittat ngt som riktigt får mig att förstå hur jag kan lösa mitt prob.

ps. ingen skola. Pappaledig. Cellolärare. ds.

LaspMedlem sedan juli 200012 980 inlägg
#8

Jag ber om ursäkt i så fall Doja. Det finns flera databasexempel som har just författare och böcker som exempel. Fel slutsats av mig då ;-(
SQL är ett kraftfullt verktyg, vilken databasmotor är du mest intresserad av då?

DojaMedlem sedan apr. 20099 inlägg
#9

ODBC Microsoft Access?

LarsGMedlem sedan dec. 200012 464 inlägg
#10

Vad får du för resultat med ovanstående fråga och vilket resultat vill du ha?

DojaMedlem sedan apr. 20099 inlägg
#11

Jag får data från alla fälten, sorterat på "Total_Quantity" (d.Quantity), men ProductID förekommer på fler än ett ställe.

Koden i inlägg #5, är perf. men jag behöver begränsa resultatet med Levererad som kommer från en annan tabell - orders. OrderID är kopplingen mellan tabellerna.

LarsGMedlem sedan dec. 200012 464 inlägg
#12

Varför har du med d.OrderID, o.OrderID, o.Levererad, i select-listan och group by?

Det dör en kattunge varje gång någon använder like på datum.

 o.Levererad between '2009-03-01' and '2009-03-31'
DojaMedlem sedan apr. 20099 inlägg
#13

LarsG skrev:

Varför har du med d.OrderID, o.OrderID, o.Levererad, i select-listan och group by?

Det dör en kattunge varje gång någon använder like på datum.

 o.Levererad between '2009-03-01' and '2009-03-31'

Bra fråga LarsG! När jag plockade bort lite grejs, vart det bättre;

SELECT DISTINCT(d.ProductID), SUM(d.Quantity) AS 'Total_Quantity' 
FROM orders_details d, orders o 
WHERE d.OrderID = o.OrderID AND
 o.Levererad LIKE '%2009-03%' 
GROUP BY ProductID 
ORDER BY 2 DESC

Däremot så sa programmet "Typblandningsfel i villkorsuttryck" när jag petade in din lilla "between" i stället för den kissemissdödande LIKE (med % dessutom) :q

Jaja, jag är inte så värst förtjust i katter ändå...

Tack alla för hjälpen, o ledsen om frågan var tråkig...

DojaMedlem sedan apr. 20099 inlägg
#14

Istället för LIKE o datum så vart ju;

o.Levererad > DateAdd('d',-30,Date())

mycket bättre.

LarsGMedlem sedan dec. 200012 464 inlägg
#15

Om du tar bort distinct också, så blir jag nöjdare.

DojaMedlem sedan apr. 20099 inlägg
#16

ok. Det är pga. att jag har GROUP BY ProductID va? Jag får ett lite annorlunda svar med DISTINCT. Varför?

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)