webForumDet fria alternativet

"Bestseller" prob.

Databaser & SQL

15 svar · 853 visningar · startad av Doja

Medlem sedan apr. 20099 inlägg
Frågan#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?

Medlem sedan juni 200032 967 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.

Medlem sedan apr. 20099 inlägg
#3

Underbart! Tack så mycket! Funkar perf.!

Medlem sedan juni 200032 967 inlägg
#4

Vasse! Och välkommen hit! :bire

Medlem 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)

Medlem sedan juli 200012 978 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?

Medlem 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.

Medlem sedan juli 200012 978 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å?

Medlem sedan apr. 20099 inlägg
#9

ODBC Microsoft Access?

Medlem 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?

Medlem 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.

Medlem 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'
Medlem 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...

Medlem 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.

Medlem sedan dec. 200012 464 inlägg
#15

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

Medlem 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?

261 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)