我正在使用oracle developer。我有一个要求,我要把这些条件的数据制成表格。
- 书被借了几次
- 平均借贷期限是多少
- 谁是它最喜欢的读者。(如果有两个人作为最喜欢的读者呢?)
我有借方表。
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
它不显示没有最喜欢的读者的book_id。我有Book_ID:1,2,5,6。所以我想要显示所有的书id,不管book_id是否没有最喜欢的读者。
您的查询不正确。它是在book_id
/emplid
级别,而不是在书级别。你可以得到你想要的:
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;
查询说明:
- 移除
select distinct
。对于group by
查询,这几乎不需要。 - 它只按
book_id
进行聚合,因为这是结果的级别。 - 使用
avg()
函数,比求和除以计数方便。 - 它使用
stats_mode()
来获得最常见的值(或几个等效模式之一)。最常见的值在统计学中称为"mode"。