在一条sql语句中使用COUNT、AVG和Having将表中的数据制成表格
我正在使用oracle developer。我有一个要求,我要把这些条件的数据制成表格在一条sql语句中使用COUNT、AVG和Having将表中的数据制成表格,sql,oracle,Sql,Oracle,我正在使用oracle developer。我有一个要求,我要把这些条件的数据制成表格 这些书被借了多少次 平均借款期限是多少 谁是它最喜欢的读者。(如果有两个人作为最喜欢的读者呢?) 我有借桌 EMPLID BOOK_ID BORROW_DT RETURN_DT --------------------------------------------- 00000058 6 17-JUL-14 31-JUL-14 00000015 6
EMPLID BOOK_ID BORROW_DT RETURN_DT
---------------------------------------------
00000058 6 17-JUL-14 31-JUL-14
00000015 6 17-JUL-14 31-JUL-14
00000001 1 16-JUL-14 30-JUL-14
00000004 1 16-JUL-14 30-JUL-14
00000009 5 16-JUL-14 30-JUL-14
00000010 5 16-JUL-14 30-JUL-14
00000044 5 16-JUL-14 30-JUL-14
00000002 1 15-JUL-14 15-JUL-14
00000008 1 16-JUL-14 30-JUL-14
00000014 1 16-JUL-14 30-JUL-14
00000007 5 16-JUL-14 30-JUL-14
00000003 1 16-JUL-14 30-JUL-14
00000004 5 15-JUL-14 29-JUL-14
00000006 1 15-JUL-14 15-JUL-14
00000009 1 15-JUL-14 29-JUL-14
00000009 2 15-JUL-14 29-JUL-14
00000010 1 15-JUL-14 29-JUL-14
00000010 2 15-JUL-14 29-JUL-14
00000011 1 15-JUL-14 29-JUL-14
00000011 2 15-JUL-14 29-JUL-14
00000012 2 15-JUL-14 15-JUL-14
00000044 1 16-JUL-14 30-JUL-14
00000003 2 16-JUL-14 30-JUL-14
00000004 2 16-JUL-14 30-JUL-14
00000001 2 14-JUL-14 14-JUL-14
00000001 1 14-JUL-14 14-JUL-14
00000001 5 14-JUL-14 28-JUL-14
00000005 2 15-JUL-14 29-JUL-14
00000007 2 15-JUL-14 29-JUL-14
00000007 1 15-JUL-14 17-JUL-14
00000008 2 15-JUL-14 29-JUL-14
00000008 5 15-JUL-14 29-JUL-14
00000013 2 15-JUL-14 29-JUL-14
00000011 2 17-JUL-14 31-JUL-14
根据需求,我有sql语句
select DISTINCT
xyz_book_id_f,
count(book_id),
TRUNC(sum(RETURN_DT - BORROW_DT)/ count(book_id), 2) as AverageDuration,
emplid
from ps_xyz_borrow09
group by book_id,emplid
having count (book_id) > 1;
结果是
BOOK_ID COUNT(BOOK_ID) AVERAGEDURATION EMPLID
-------------------------------------------------------
1 2 7 00000001
2 2 14 00000009
2 2 14 00000011
它不会显示没有最喜欢的读者的图书id。
我有书号:1,2,5,6。所以我想显示所有的图书id,不管图书id是否没有最喜欢的阅读器
任何帮助都将不胜感激。您的查询不正确。它位于
图书id
/员工id
级别,而不是图书级别。您可以通过以下方式获得您想要的:
select xyz_book_id_f, count(book_id) as NumTimesBorrowed,
TRUNC(avg(RETURN_DT - BORROW_DT), 2) as AverageDuration,
stats_mode(emplid) as MostCommonBorrower
from ps_xyz_borrow09
group by book_id;
有关此查询的说明:
- 它删除
。对于选择distinct
查询,这几乎是不需要的groupby
- 它只按
进行聚合,因为这是结果的级别book\u id
- 它使用
函数,这比总和除以计数更方便avg()
- 它使用
stats\u mode()。统计中最常见的值称为“模式”
看在上帝的份上,别喊了!什么是“人物代码”?谢谢@Gordon Linoff的帮助。它很好用。你的笔记也很清楚。谢谢你。