简体   繁体   English

oracle 中的价格和数量总和

[英]Total sum of price and quantity in oracle

I have a problem.我有个问题。 I need to calculate a total sum of order in my DB.我需要计算我的数据库中的订单总和。 I have 3 tables:我有 3 张桌子:

CREATE TABLE Potrawa(
id_potrawy INT CONSTRAINT Potrawa_PK PRIMARY KEY,
Nazwa VARCHAR2(150) NOT NULL,
Cena NUMBER(6,2) NOT NULL, **(PRICE)**
Opis VARCHAR(100)
);

CREATE TABLE Zamowienie(
id_zamowienia INT CONSTRAINT Zamowienie_PK PRIMARY KEY,
Ilosc INT, **(QUANTITY)**
Data DATE,
Ocena INT CONSTRAINT Ocena_Zamowienie_CHECK CHECK (Ocena IN (1, 2, 3, 4, 5)),
klient_id INT CONSTRAINT Zamowienie_Klient_FK REFERENCES Klient(id_klient),
pracownik_id INT CONSTRAINT Zamowienie_Pracownik_FK REFERENCES Pracownik(id_pracownik),
potrawy_id INT CONSTRAINT Zamowienie_Menu_FK REFERENCES Potrawa(id_potrawy),
typ_zamowienia_id INT CONSTRAINT Zamowienie_Typ_FK REFERENCES Typ_zamowienia(id_typ_zamowienia)
);

CREATE TABLE Menu(
restauracja_id INT NOT NULL CONSTRAINT Menu_Restauracje_FK REFERENCES Restauracja(id_restauracja),
potrawa_id INT NOT NULL CONSTRAINT Menu_Potrawa_FK REFERENCES Potrawa(id_potrawy),
CONSTRAINT Menu_PK PRIMARY KEY(restauracja_id, potrawa_id),
rodzaj_menu_id INT CONSTRAINT Menu_Rodzaj_Menu_FK REFERENCES Rodzaj_menu(id_rodzaj_menu)
);

I want to write a query that show me sum of each order.我想写一个查询来显示每个订单的总和。 I wrote sth like this, but it's not working.我是这样写的,但它不起作用。 Sum is not that I expect.总和不是我所期望的。

select distinct z.id_zamowienia as "zamowienie", z.potrawy_id as "Potrawa", p.nazwa as "Nazwa potrawy", z.ilosc as ILOSC,
count(*) over(partition by z.potrawy_id, z.id_zamowienia) * p.cena AS "CENA"
from potrawa p, menu m, zamowienie z
where p.id_potrawy = m.potrawa_id and m.potrawa_id = z.potrawy_id

Can someone give me tip how to fix it or how can I do it in another way (PARTITION BY is obligatory).有人可以给我提示如何解决它或者我该如何以另一种方式来解决它(PARTITION BY 是强制性的)。

First of all it's always better to use proper join syntax.首先,使用正确的连接语法总是更好。 Do you want to find sum(Ilosc) instead of count(*) for that partition?你想为那个分区找到 sum(Ilosc) 而不是 count(*) 吗?

select distinct
    z.id_zamowienia as "zamowienie",
    z.potrawy_id as "Potrawa",
    p.nazwa as "Nazwa potrawy",
    z.ilosc as ILOSC,
    sum(Ilosc) over(partition by z.potrawy_id, z.id_zamowienia) * p.cena AS "CENA"
from
    potrawa p
    inner join menu m on p.id_potrawy = m.potrawa_id
    inner join  zamowienie z and m.potrawa_id = z.potrawy_id

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM