2017-03-10 17 views
-1

count(*)を使用して結果の総量を取得するにはどうすればよいですか?

 
select t.fecha_hora_timbre,e.nombre,e.apellido,d.descripcion as departamento_trabaja, t.fecha,count(*) 
from fulltime.timbre t, fulltime.empleado e, fulltime.departamento d 
where d.depa_id=e.depa_id and t.codigo_empleado=e.codigo_empleado and 
      trunc(t.fecha) between trunc(to_date('15/02/2017','dd/mm/yyyy')) and trunc(to_date('14/03/2017','dd/mm/yyyy')) 

group by t.fecha_hora_timbre,e.nombre,e.apellido,d.descripcion, t.fecha 

予想データ...

 
NOMBRE   | APELLIDO  | DEPARTAMENTO_TRABAJA | VECES_MARCADAS(count) 
MARIA TARCILA  IGLESIAS BECERRA   ALCALDIA    4 
KATHERINE TATIANA SEGOVIA FERNANDEZ  ALCALDIA    10 
FREDDY AGUSTIN VALDIVIESO VALLEJO  ALCALDIA    3 

...

resultado

MY QUERY ...私は一人一人のために結果の合計量を取得する必要がありますが、私は得ます

更新..

select e.nombre,e.apellido,d.descripcion as departamento_trabaja,COUNT(*) 
from fulltime.timbre t, fulltime.empleado e, fulltime.departamento d 
where d.depa_id=e.depa_id and t.codigo_empleado=e.codigo_empleado and 
      trunc(t.fecha) between trunc(to_date('15/02/2017','dd/mm/yyyy')) and trunc(to_date('14/03/2017','dd/mm/yyyy')) 

group by t.fecha_hora_timbre,e.nombre,e.apellido,d.descripcion, t.fecha 
+0

多くの列を選択(およびグループ化)しています。これらすべてのユニークな組み合わせごとにカウントが表示されます。おそらく 'fecha_hora_timbre'と' fecha'を除いた残りの列の数を見て、より少ない列を見たいでしょうか?またはあなたはそれらの列のすべてを保持し、それぞれの人の合計数も持っていますか? 「Maria Tarcila」の3つの行がすべて表示されますが、それぞれに「3」が追加されていますか? –

+0

[あなたの出力をテキストとして表示](https://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a -question/285557#285557)、期待している結果が含まれていれば、実際に達成したいことがわかります。 –

+0

HI !!! @Alex Pooleありがとう!まあ、私は各人の総量を保つ必要があります:[例](http://i.imgur.com/dND6MuI.png) –

答えて

0

実際にカウントしたい非集計列だけを選択してグループ化する必要があります。現時点では、各行にfecha_hora_timbrefechaの列が含まれているので、実際にカウントしたい名前/部門情報だけでなく、それらの列の固有の組み合わせもカウントしています。

select e.nombre, e.apellido, d.descripcion as departamento_trabaja, 
    count(*) a veces_marcadas 
from fulltime.timbre t 
join fulltime.empleado e on t.codigo_empleado=e.codigo_empleado 
join fulltime.departamento d on d.depa_id=e.depa_id 
where t.fecha >= to_date('15/02/2017','dd/mm/yyyy') 
and t.fecha < to_date('15/03/2017','dd/mm/yyyy') 
group by e.nombre, e.apellido, d.descripcion 

追加の列を削除しました。選択リストとグループバイ句の両方から削除されたことに注目してください。選択リストにグループに含まれていない非集約列がある場合は、ORA-00937エラーが発生します。あなたがそれを見ることができないにもかかわらずあなたが期待した結果を得ることができなくても、あなたが選択リストにないグループに列を持っていれば、それはまだグループ化されます。

また、旧式の結合構文から現代の構文に変更しました。そして私は日付比較を変更しました。最初にtrunc(to_date('15/02/2017','dd/mm/yyyy'))の一部としてtrunc()を実行することは無意味です - あなたはすでに時間の部分が真夜中であることを知っているので、truncは何も達成しません。しかし、ほとんどの場合、インデックスがある場合はfechaそのインデックスを使用することができます。 trunc(f.techa)を実行すると、すべての列値の値を切り捨てる必要があります。これにより、関数ベースのインデックスがない限り、使用されているインデックスが停止します。 betweenとし、>=<を使用して1日後に上限を設定すると、全体的に同じ効果が得られるはずです。

+0

thanks @Alex Poole !! –

関連する問題