嘿,伙计们......
我有这个问题,我需要在查询中包含SUM聚合函数,但我希望它在查询结果中特定于某处。最简单的是你可以看一下图片,也许你会知道我的意思和想要实现的目标。
我想要一个临时字段(例如SUM),我可以在最后加入 -
sum(l.cijenaKupovna) as SUM
代码:
SELECT n.datum, n.IdNarudzbe, l.naziv, l.proizvodac, z.prezime, d.naziv, l.cijenaKupovna, sum(l.cijenaKupovna) from narudzbe n
JOIN lijekovi_has_narudzbe ln ON ln.IdNarudzbe=n.IdNarudzbe
JOIN lijekovi l ON ln.serijskiBroj = l.serijskiBroj
JOIN dobavljaci d ON d.IdDobavljac = n.IdDobavljac
JOIN zaposlenici z ON z.OIB = n.OIB
GROUP BY 2;
我得到了这个错误:消息164,级别15,状态1,行6 每个GROUP BY表达式必须至少包含一个不是外部引用的列。
这是我甚至可能要求的吗? :d
答案 0 :(得分:1)
您的GROUP BY子句需要包含您查询的每个列,但用于SUM的列除外。
答案 1 :(得分:1)
您需要GROUP BY那些您没有聚合的字段:
SELECT n.datum, n.IdNarudzbe, l.naziv, l.proizvodac, z.prezime, d.naziv, l.cijenaKupovna, sum(l.cijenaKupovna) from narudzbe n
JOIN lijekovi_has_narudzbe ln ON ln.IdNarudzbe=n.IdNarudzbe
JOIN lijekovi l ON ln.serijskiBroj = l.serijskiBroj
JOIN dobavljaci d ON d.IdDobavljac = n.IdDobavljac
JOIN zaposlenici z ON z.OIB = n.OIB
GROUP BY n.datum, n.IdNarudzbe, l.naziv, l.proizvodac, z.prezime, d.naziv
正如您在评论中所述,当您在GROUP BY中提取汇总值l.cijenaKupovna
时,您将在最后两个字段中获得相同的数字。从技术上讲,当你这样做时,你仍然是SUM
- 你的线,但你只是在每一行中执行你的总和。但是,当您从群组中移除l.cijenaKupovna
时,除了此列之外的所有内容({1}}都会SUM
。
答案 2 :(得分:1)
尝试分析方式:
SELECT n.datum, n.IdNarudzbe, l.naziv, l.proizvodac, z.prezime, d.naziv, l.cijenaKupovna, sum(l.cijenaKupovna) over() from narudzbe n
JOIN lijekovi_has_narudzbe ln ON ln.IdNarudzbe=n.IdNarudzbe
JOIN lijekovi l ON ln.serijskiBroj = l.serijskiBroj
JOIN dobavljaci d ON d.IdDobavljac = n.IdDobavljac
JOIN zaposlenici z ON z.OIB = n.OIB
如果您只想显示一个值,则可以执行此操作:
SELECT n.datum, n.IdNarudzbe, l.naziv, l.proizvodac, z.prezime, d.naziv, l.cijenaKupovna,
case when rownum = 1 then sum(l.cijenaKupovna) over() else null end case from narudzbe n
JOIN lijekovi_has_narudzbe ln ON ln.IdNarudzbe=n.IdNarudzbe
JOIN lijekovi l ON ln.serijskiBroj = l.serijskiBroj
JOIN dobavljaci d ON d.IdDobavljac = n.IdDobavljac
JOIN zaposlenici z ON z.OIB = n.OIB
我希望它可以帮到你。