webForumDet fria alternativet

Ta fram de mest beställda varorna ur inkomna beställningar

Databaser & SQL

4 svar · 411 visningar · startad av Grillcliff

Medlem sedan sep. 200032 inlägg
Frågan#1

Hej,

Hur kan en simpel SQL-stäng vars uppgift är att ta ut (a)id för de mest köpta varorna i en webbutik se ut?

Tabellen (order_products) ser ut som följer:

aid	product		amount	price (vid köptillfället, därför behövs länkning - se nedan)

1	Björn		2	*
1	Björn		1	*
1	Björn		1	*

2	Gorilla		2	*
2	Gorilla		3	*

3	Krokodil	6	*

Resultatet bör bli: 3, 2, 1 och dessa nummer bör i sin tur länkas mot tabellen products för att ta fram products.price och vid närmare eftertanke kanske även products.product

I skrivande stund gäller det Access, men eftersom det kan bli aktuellt med MySQL-konvertering i framtiden vore det kalas ifall Access-specifika kommandon kunde utlämnas i största möjliga mån :)

Med vänlig hälsning,
Fredrik

Medlem sedan dec. 200012 464 inlägg
#2
select aid
from order_products
group by aid
order by sum(amount) desc
Medlem sedan sep. 200032 inlägg
#3

Hoppsan, det var så simpelt. Var slänger man in INNER JOIN eller vad man använder sig av för att få ut products.product och products.price?

Den skall alltså plocka poster där order_products.aid = products.id

Edit:
Är detta en bit på vägen?

SQL = "SELECT op.aid, op.amount, p.id, p.price FROM order_products op LEFT OUTER JOIN products p ON op.aid = p.id GROUP BY op.aid ORDER BY sum(op.amount) DESC, op.amount, p.price, p.id"

Medlem sedan dec. 200012 464 inlägg
#4
SELECT op.aid, p.price, p.product 
FROM order_products op INNER JOIN products p 
ON op.aid = p.id 
GROUP BY aid, p.price, p.product 
ORDER BY sum(amount) DESC
Medlem sedan sep. 200032 inlägg
#5

Tack än en gång för all hjälp. Jag var nog nära på det själv, men det ville sig inte ;)

256 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)