SQL POIZVEDBA

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:

    1. 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).
    2. Imaš naročilo Y s postavkami, ki imajo 50, 100 in 100 kosov. Tega naročila ne upoštevaš.
    3. 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).
    4. 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_num

where quantity <= 20

quantity <= 20

GROUP BY OrderItems.order_num

BY OrderItems.order_num

problem 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 

 

Avtor: iggy1, objavljeno na portalu SloDug.si (Arhiv)

Leave a comment

Please note that we won't show your email to others, or use it for sending unwanted emails. We will only use it to render your Gravatar image and to validate you as a real person.

spirit1
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&scaron;i: ime produkta, datum zadnjega naročila in skupno &scaron;tevilo vseh naročil do sedaj. Izpi&scaron;i tudi tiste, ki &scaron;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&scaron;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 &gt;= 4 AND prod_price &lt;= 6 AND ordered_price &gt; 300

spirit1
spirit1 - torek, 11. september 2007

ok preden se sploh lotim gledanja teh stavkov en nasvet:odvadi se uporabljati select-e v select&nbsp;listiselect ... (select...) from ...to je za performance smrt.

iggy1
iggy1 - sobota, 08. september 2007

Nevem zakaj ponavlja moje besedilo ko objavim komentar.

iggy1
iggy1 - sobota, 08. september 2007

Zdj bi pa prosil &scaron;e pomoč pri dveh nalogah prve ja ta:Za vsak produkt izpi&scaron;i: ime produkta, datum zadnjega naročila in skupno &scaron;tevilo vseh naročil do sedaj. Izpi&scaron;i tudi tiste, ki &scaron;e niso imeli naročil.Tale poizvedba mi izpi&scaron;e vse produkte ter skupno &scaron;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&scaron;e vse produkte plus &scaron;tevilo vseh naročilRIGHT JOIN Products on Products.prod_id = OrderItems.prod_idgroup by Products.prod_nameTale poizvedba pa mi lepo izpi&scaron;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&scaron;e kakor naloga praviDruga naloga pa pravi takoleIzpi&scaron;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&scaron;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 &lt;=6 and OrderItems.item_price &lt;=4group by prod_nameTale poizvedba pa mi izpi&scaron;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&scaron;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&scaron;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 &lt;=6 and OrderItems.item_price &lt;=4group by prod_nameTale poizvedba pa mi izpi&scaron;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&scaron;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&scaron;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&scaron;e vse produkte plus &scaron;tevilo vseh naročilRIGHT JOIN Products on Products.prod_id = OrderItems.prod_idgroup by Products.prod_nameTale poizvedba pa mi lepo izpi&scaron;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&scaron;e kakor naloga praviDruga naloga pa pravi takoleIzpi&scaron;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&scaron;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 &lt;=6 and OrderItems.item_price &lt;=4group by prod_nameTale poizvedba pa mi izpi&scaron;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&scaron;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&scaron;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 &lt;=6 and OrderItems.item_price &lt;=4group by prod_nameTale poizvedba pa mi izpi&scaron;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&scaron;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&scaron;im nalogo.Hvala že vnaprej.Lp,IgorLp,IgorIn me zopet zanima kako ta dva querija združim da lahko re&scaron;im nalogo.Hvala že vnaprej.Lp,Igor

iggy1
iggy1 - sobota, 08. september 2007

Super mojo staro poizvedno sem s tvojo nadgradil in dela super.Full hvala.&nbsp;&nbsp;Lp,Igor

iggy1
iggy1 - sobota, 08. september 2007

Hvala bom preveril če deluje.&nbsp;&nbsp;Lp,Igor

spirit1
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 &gt; 20 AND O.order_num = OI.order_num)

iggy1
iggy1 - petek, 07. september 2007

Ni treba sem uredil.

iggy1
iggy1 - petek, 07. september 2007

pri poizvedbi izbri&scaron;ite 2. 3. in 5. vrstico. Nevem zakaj jih vrine noter.

iggy1
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 &lt;= 20GROUP BY OrderItems.order_numDo sem sem pri&scaron;el.