如何在oracle sql中从计数中选择平均值?

yptwkmov  于 2022-11-28  发布在  Oracle
关注(0)|答案(2)|浏览(172)

我是SQL新手,我想知道如何从计数中选择平均值。这是我的代码的样子。

Select zwierzeta.nazwa,zwierzeta.klatka_id,klatki.nazwa, count(zwierzeta.klatka_id) as licz
from zwierzeta
join klatki
on zwierzeta.zwierze_id = klatki.klatka_id
having count(zwierzeta.klatka_id) >= 1
GROUP BY zwierzeta.nazwa,zwierzeta.klatka_id,klatki.nazwa

现在我想从count(zwierzeta.klatka_id)中选择平均值。
我试过这个方法

Select zwierzeta.nazwa,zwierzeta.klatka_id,klatki.nazwa, count(zwierzeta.klatka_id) as licz, avg(licz) as avg_number
from zwierzeta
join klatki
on zwierzeta.zwierze_id = klatki.klatka_id
having count(zwierzeta.klatka_id) >= 1
GROUP BY zwierzeta.nazwa,zwierzeta.klatka_id,klatki.nazwa
`

但它不识别“licz”

2lpgd968

2lpgd9681#

COUNT函数周围使用AVG分析函数。如果要计算整个结果集的平均值,请执行以下操作:

SELECT z.nazwa,
       z.klatka_id,
       k.nazwa,
       COUNT(z.klatka_id) as licz,
       AVG(COUNT(z.klatka_id)) OVER () as avg_number
FROM   zwierzeta z
       JOIN klatki k
       ON (z.zwierze_id = k.klatka_id)
GROUP BY
       z.nazwa,
       z.klatka_id,
       k.nazwa
HAVING COUNT(z.klatka_id) >= 1

如果要计算结果集的子分区的平均值,请添加PARTITION BY子句:

SELECT z.nazwa,
       z.klatka_id,
       k.nazwa,
       COUNT(z.klatka_id) as licz,
       AVG(COUNT(z.klatka_id)) OVER (PARTITION BY z.nazwa, z.klatka_id) as avg_number
FROM   zwierzeta z
       JOIN klatki k
       ON (z.zwierze_id = k.klatka_id)
GROUP BY
       z.nazwa,
       z.klatka_id,
       k.nazwa
HAVING COUNT(z.klatka_id) >= 1
yrefmtwq

yrefmtwq2#

您必须在另一个查询中执行此操作

SELECT zwierzeta_nazwa,zwierzeta_klatka_id,klatki_nazwa, 
  licz, avg(licz) as avg_number
  FROM (
  Select zwierzeta.nazwa as zwierzeta_nazwa,zwierzeta.klatka_id as zwierzeta_klatka_id,klatki.nazwa as klatki_nazwa, 
  count(zwierzeta.klatka_id) as licz
  from zwierzeta, klatki
  where zwierzeta.zwierze_id = klatki.klatka_id
  having count(zwierzeta.klatka_id) >= 1
 GROUP BY zwierzeta.nazwa,zwierzeta.klatka_id,klatki.nazwa)
 GROUP BY zwierzeta_nazwa,zwierzeta_klatka_id,klatki_nazwa, 
  licz

相关问题