Pozdravljeni!
Imam problem pri sql poizvedbi in sicer pri tej nalogi
Seštej vrednosti naročil, ki ne vsebujejo postavke (order item), ki bi imela več kot 20 kosov. Zanimajo nas torej tista naročila, ki vsebujejo izključno 'mala naročila' produktov. Primer:
- Imaš naročilo X s postavkami, ki imajo 5, 10 in 20 kosov. To naročilo upoštevaš (vse postavke imajo 20 kosov ali manj).
- Imaš naročilo Y s postavkami, ki imajo 50, 100 in 100 kosov. Tega naročila ne upoštevaš.
- Imaš naročilo Z s postavkami, ki imajo 5, 10 in 30 kosov. Tega naročila ne upoštevaš (ker ima ena od postavk več kot 30 kosov).
- Rezultat bi bil v tem primeru enak vrednosti naročila X, ker to naročilo edino ustreza zahtevam.
do zdaj sem prišel do tukaj
SELECT OrderItems.order_num, (select SUM(item_price)from Orders where Orders.order_num = OrderItems.order_num)
OrderItems.order_num, (select SUM(item_price)from Orders where Orders.order_num = OrderItems.order_num)FROM Orders inner join OrderItems on Orders.order_num = OrderItems.order_num
Orders inner join OrderItems on Orders.order_num = OrderItems.order_numwhere quantity <= 20
quantity <= 20GROUP BY OrderItems.order_num
BY OrderItems.order_numproblem pa je, ker nevem kako bi izbral res samo tista naročila ki ne vsebujejo postavk v katerih je quantity večji od 20.
V mojem queriju izbere vsa naročila v katerih je vsaj eden manjši od 20.
TABELI
Orders -- ime tabele
order_num -- private key
orde_date
cust_id
OrderItems -- ime tabele
order_num -- foreign key
prod_id
quantity
item_price
Hvala že vnaprej.
Lp,
Igor
spirit1 - torek, 11. september 2007
evo tole bi moralo zadostovati. probaj razumeti kaj sem naredil in zakaj. pa druguc se prosim podaj strukturo vseh nastopajocih tabel. --Za vsak produkt izpiši: ime produkta, datum zadnjega naročila in skupno število vseh naročil do sedaj. Izpiši tudi tiste, ki še niso imeli naročil. SELECT P.prod_name, MAX(order_date) AS order_date, COUNT(*) AS Number_Of_Orders FROM Products p LEFT JOIN OrderItems OI ON P.prod_id = OI.prod_id LEFT JOIN Orders O ON O.order_num = OI.order_num GROUP BY P.prod_name --Izpiši produkte, za katere veljata točki a in b: Cena produkta (prod_price) je med 4 in 6 Skupna vrednost vseh naročil (OrderItems) tega produkta je večja kot 300 SELECT P.prod_name, MAX(order_date) AS order_date, COUNT(*) AS Number_Of_Orders FROM Products p JOIN (SELECT prod_id, SUM(item_price*quantity) AS ordered_price FROM OrderItems GROUP BY prod_id) OI ON P.prod_id = OI.prod_id WHERE prod_price >= 4 AND prod_price <= 6 AND ordered_price > 300
spirit1 - torek, 11. september 2007
ok preden se sploh lotim gledanja teh stavkov en nasvet:odvadi se uporabljati select-e v select listiselect ... (select...) from ...to je za performance smrt.
iggy1 - sobota, 08. september 2007
Nevem zakaj ponavlja moje besedilo ko objavim komentar.
iggy1 - sobota, 08. september 2007
Zdj bi pa prosil še pomoč pri dveh nalogah prve ja ta:Za vsak produkt izpiši: ime produkta, datum zadnjega naročila in skupno število vseh naročil do sedaj. Izpiši tudi tiste, ki še niso imeli naročil.Tale poizvedba mi izpiše vse produkte ter skupno število naročilSELECT Products.prod_name,(select COUNT(Orders.order_num) from Orders)from OrderItemsINNER JOIN Orders on Orders.order_num = OrderItems.order_num -- izpiše vse produkte plus število vseh naročilRIGHT JOIN Products on Products.prod_id = OrderItems.prod_idgroup by Products.prod_nameTale poizvedba pa mi lepo izpiše datume:select OrderItems.order_num, (select max(Orders.order_date)from Orders where Orders.order_num = OrderItems.order_num) from OrderItemsleft join Orders on Orders.order_num = OrderItems.order_numgroup by OrderItems.order_num Kako bi ta dva querija združil lahko da mi lepo izpiše kakor naloga praviDruga naloga pa pravi takoleIzpiši produkte, za katere veljata točki a in b:Cena produkta (prod_price) je med 4 in 6Skupna vrednost vseh naročil (OrderItems) tega produkta je večja kot 300Tale poizvedba mi izpiše vse produkte katerih cena je med 4 in 6select Products.prod_name from OrderItemsinner join Products on Products.prod_id = OrderItems.prod_id where OrderItems.item_price <=6 and OrderItems.item_price <=4group by prod_nameTale poizvedba pa mi izpiše skupno vrednost naročil vseh produktovselect OrderItems.order_num, (select sum(quantity*item_price)) from OrderITemsleft join Orders on Orders.order_num = OrderItems.order_numwhere Orders.order_num = OrderItems.order_numgroup by OrderItems.order_numIn me zopet zanima kako ta dva querija združim da lahko rešim nalogo.Hvala že vnaprej.Lp,Igorselect OrderItems.order_num, (select sum(quantity*item_price)) from OrderITemsleft join Orders on Orders.order_num = OrderItems.order_numwhere Orders.order_num = OrderItems.order_numgroup by OrderItems.order_numIn me zopet zanima kako ta dva querija združim da lahko rešim nalogo.Hvala že vnaprej.Lp,Igorselect Products.prod_name from OrderItemsinner join Products on Products.prod_id = OrderItems.prod_id where OrderItems.item_price <=6 and OrderItems.item_price <=4group by prod_nameTale poizvedba pa mi izpiše skupno vrednost naročil vseh produktovselect OrderItems.order_num, (select sum(quantity*item_price)) from OrderITemsleft join Orders on Orders.order_num = OrderItems.order_numwhere Orders.order_num = OrderItems.order_numgroup by OrderItems.order_numIn me zopet zanima kako ta dva querija združim da lahko rešim nalogo.Hvala že vnaprej.Lp,Igorselect OrderItems.order_num, (select sum(quantity*item_price)) from OrderITemsleft join Orders on Orders.order_num = OrderItems.order_numwhere Orders.order_num = OrderItems.order_numgroup by OrderItems.order_numIn me zopet zanima kako ta dva querija združim da lahko rešim nalogo.Hvala že vnaprej.Lp,IgorLp,IgorSELECT Products.prod_name,(select COUNT(Orders.order_num) from Orders)from OrderItemsINNER JOIN Orders on Orders.order_num = OrderItems.order_num -- izpiše vse produkte plus število vseh naročilRIGHT JOIN Products on Products.prod_id = OrderItems.prod_idgroup by Products.prod_nameTale poizvedba pa mi lepo izpiše datume:select OrderItems.order_num, (select max(Orders.order_date)from Orders where Orders.order_num = OrderItems.order_num) from OrderItemsleft join Orders on Orders.order_num = OrderItems.order_numgroup by OrderItems.order_num Kako bi ta dva querija združil lahko da mi lepo izpiše kakor naloga praviDruga naloga pa pravi takoleIzpiši produkte, za katere veljata točki a in b:Cena produkta (prod_price) je med 4 in 6Skupna vrednost vseh naročil (OrderItems) tega produkta je večja kot 300Tale poizvedba mi izpiše vse produkte katerih cena je med 4 in 6select Products.prod_name from OrderItemsinner join Products on Products.prod_id = OrderItems.prod_id where OrderItems.item_price <=6 and OrderItems.item_price <=4group by prod_nameTale poizvedba pa mi izpiše skupno vrednost naročil vseh produktovselect OrderItems.order_num, (select sum(quantity*item_price)) from OrderITemsleft join Orders on Orders.order_num = OrderItems.order_numwhere Orders.order_num = OrderItems.order_numgroup by OrderItems.order_numIn me zopet zanima kako ta dva querija združim da lahko rešim nalogo.Hvala že vnaprej.Lp,Igorselect OrderItems.order_num, (select sum(quantity*item_price)) from OrderITemsleft join Orders on Orders.order_num = OrderItems.order_numwhere Orders.order_num = OrderItems.order_numgroup by OrderItems.order_numIn me zopet zanima kako ta dva querija združim da lahko rešim nalogo.Hvala že vnaprej.Lp,Igorselect Products.prod_name from OrderItemsinner join Products on Products.prod_id = OrderItems.prod_id where OrderItems.item_price <=6 and OrderItems.item_price <=4group by prod_nameTale poizvedba pa mi izpiše skupno vrednost naročil vseh produktovselect OrderItems.order_num, (select sum(quantity*item_price)) from OrderITemsleft join Orders on Orders.order_num = OrderItems.order_numwhere Orders.order_num = OrderItems.order_numgroup by OrderItems.order_numIn me zopet zanima kako ta dva querija združim da lahko rešim nalogo.Hvala že vnaprej.Lp,Igorselect OrderItems.order_num, (select sum(quantity*item_price)) from OrderITemsleft join Orders on Orders.order_num = OrderItems.order_numwhere Orders.order_num = OrderItems.order_numgroup by OrderItems.order_numIn me zopet zanima kako ta dva querija združim da lahko rešim nalogo.Hvala že vnaprej.Lp,IgorLp,IgorIn me zopet zanima kako ta dva querija združim da lahko rešim nalogo.Hvala že vnaprej.Lp,Igor
iggy1 - sobota, 08. september 2007
Super mojo staro poizvedno sem s tvojo nadgradil in dela super.Full hvala. Lp,Igor
iggy1 - sobota, 08. september 2007
Hvala bom preveril če deluje. Lp,Igor
spirit1 - petek, 07. september 2007
tole je najbrz najbolj efikasen nacin za to kar ti hoces:SELECT O.* FROM Orders O WHERE NOT EXISTS (SELECT * FROM OrderItems OI WHERE OI.quantity > 20 AND O.order_num = OI.order_num)
iggy1 - petek, 07. september 2007
Ni treba sem uredil.
iggy1 - petek, 07. september 2007
pri poizvedbi izbrišite 2. 3. in 5. vrstico. Nevem zakaj jih vrine noter.
iggy1 - petek, 07. september 2007
SELECT OrderItems.order_num, (select SUM(item_price)from Orders where Orders.order_num = OrderItems.order_num)FROM Orders inner join OrderItems on Orders.order_num = OrderItems.order_numwhere quantity <= 20GROUP BY OrderItems.order_numDo sem sem prišel.