webForumDet fria alternativet

Kan man göra detta med en SQL-fråga?

Databaser & SQL

8 svar · 538 visningar · startad av jme

Medlem sedan maj 20012 237 inlägg
Frågan#1

Jag har följande tables: orders, services och orders_services.

orders:
order_id

services:
service_id

orders_services:
order_id
service_id
amount

Exempeldata:

orders:

post #1: order_id = 5
post #2: order_id = 6
post #3: order_id = 7

services:

post #1: service_id = 1
post #2: service_id = 2
post #3: service_id = 3

orders_services:

post #1: order_id = 5, service_id = 1, amount = 4
post #2: order_id = 5, service_id = 2, amount = 10
post #3: order_id = 6, service_id = 2, amount = 1
post #4: order_id = 6, service_id = 3, amount = 2
post #5: order_id = 7, service_id = 1, amount = 4

Jag vill få ut alla de poster från orders, som har poster i orders_service och där sum(amount) < 10.

Resultaten enligt exempeldatan:

post #2 (orders) (summa: 3 -> 1 + 2)
post #3 (orders) (summa: 4)

post #1 ger en summa på 14 (4 + 10) så den får inte inkluderas i resultatet

Är detta möjligt att göra med en(1) SQL-sats? Jag kör med MySql.

Medlem sedan juni 20031 837 inlägg
#2

vet inte om följande kod löser det.

select 
  o.order_id 
from 
  orders_services as os 
  join orders as o 
    on o.order_id=os.order_id 
where 
  sum(os.amount) < 10 
group 
  by os.order_id
Medlem sedan maj 20012 237 inlägg
#3

Man får väl inte använda SUM() i WHERE-satsen?

Medlem sedan juni 20031 837 inlägg
#4

får man inte?

testa det, fungerar det inte så kan du testa följande

select 
  o.order_id 
  sum(os.amount) as OSA
from 
  orders_services as os 
  join orders as o 
    on o.order_id=os.order_id 
where 
  OSA < 10 
group 
  by os.order_id
Medlem sedan maj 20012 237 inlägg
#5

Jag får:

Unknown column 'OSA' in 'where clause'

Medlem sedan juni 20031 837 inlägg
#6

testade du den första lösningen?
där SUM() fanns i where-satsen

Medlem sedan maj 20012 237 inlägg
#7

Jo och det fungerade inte.

Medlem sedan dec. 200012 464 inlägg
#8
select o.order_id 
  from orders_services as os join orders as o 
    on o.order_id=os.order_id 
group by os.order_id
having sum(os.amount) < 10
Medlem sedan maj 20012 237 inlägg
#9

LarsG: din version fungerar, tack!

268 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)