Oracle sum()列的行数

时间:2015-12-07 12:22:59

标签: sql oracle11g count

我试图查看我在eache列中按行计数的视图。到目前为止我得到的是:

 create OR REPLACE view view_test as                                                                                        
  select distinct(estadodebicicleta.n_bicicleta) as bicicleta_ID, count(estadodebicicleta.guiador) + count(estadodebicicleta.celin) as dmgLVL, estadodebicicleta.guiador, estadodebicicleta.celin, estadodebicicleta.dt_verificacao as data_avaliacao from estadodebicicleta
    group by estadodebicicleta.n_bicicleta, estadodebicicleta.dt_verificacao, estadodebicicleta.guiador, estadodebicicleta.celin 
      order by dmgLVL;

给出了这个结果:

enter image description here

这是错误的。我想做的是:

enter image description here

对我失踪的事情有任何想法?谢谢你的关注。

2 个答案:

答案 0 :(得分:1)

这是您的查询格式化并使用表别名并删除不必要的distinct

select b.n_bicicleta as bicicleta_ID,
       count(b.guiador) + count(b.celin) as dmgLVL, b.guiador, b.celin,
       b.dt_verificacao as data_avaliacao
from estadodebicicleta b
group by b.n_bicicleta, b.dt_verificacao, b.guiador, b.celin 
order by dmgLVL;

根据您的预期结果,聚合没有意义。也许这会做你想要的:

select b.n_bicicleta as bicicleta_ID,
       (b.guiador + b.celin) as dmgLVL, b.guiador, b.celin,
       b.dt_verificacao as data_avaliacao
from estadodebicicleta b
order by dmgLVL;

答案 1 :(得分:0)

弄乱了我的代码,找到了答案:

create or replace view dados_bicicleta_estados as 
    SELECT edb.n_bicicleta, (edb.guiador + edb.selim + edb.corrente + edb.tfrontal + edb.ttraseiro + edb.pfrontal + edb.ptraseiro + edb.pedais) as dmgLVL, edb.guiador, edb.selim, edb.corrente, edb.tfrontal, edb.ttraseiro, edb.pfrontal, edb.ptraseiro, edb.pedais, edb.dt_verificacao as data_avaliacao
    FROM estadodebicicleta edb
    INNER JOIN (SELECT n_bicicleta, MAX(dt_verificacao) AS MaxDateTime
                  FROM estadodebicicleta
                    GROUP BY n_bicicleta) groupededb 
    ON edb.n_bicicleta = groupededb.n_bicicleta 
    AND edb.dt_verificacao = groupededb.MaxDateTime
    ORDER BY DMGLVL DESC;

这给了我想要的东西。并感谢帮助每个人。