我正在我的大学从事一个项目,这非常重要。我想我有它的工作,但我必须在最近几天学习SQL才能做到这一点,并且我想在这里发布它,以便仔细检查所有比我更了解SQL的人。
这是一个测试
的小例子index BorrowerID CompanyID PackageID
---------- ---------- ---------- ----------
0 1 100 10
1 1 200 10
2 2 300 20
3 2 300 20
4 2 400 20
5 2 100 20
6 3 400 30
7 3 100 30
8 3 200 30
9 1 100 40
目标:
我们想知道公司向借款人贷款的次数。在银团贷款中,一个包裹中可能有多个贷款,因此每个包裹只计算一次。公司可以向同一借款人贷款多个包裹,这些都需要增加计数。理想情况下,我们会有一个数据集,其中借款人与公司有关系,定义为已从包中的公司收到至少一笔贷款。以下是测试结果:
BorrowerID CompanyID testResults
---------- ---------- -----------
1 100 2
1 200 1
2 100 1
2 300 1
2 400 1
3 100 1
3 200 1
3 400 1
BorrowerID 1两次从银行100借款。一旦进入包装10,然后再进入包装40,结果显示2为正确的计数。所有其他人都是正确的,因为他们只与银行有一个关系。
这是我为实现这个目的而运行的查询:
.open testdb.db
.mode column
.headers on
select * from testdb;
drop table if exists innerQ;
create table innerQ
AS select PackageID, BorrowerID, CompanyID, count(*) as c
from testdb
group by PackageID, CompanyID
order by PackageID asc;
.print
.print 'inner query'
select * from innerQ;
.print
.print 'test'
select BorrowerID, CompanyID, count(*) as testResults
from innerQ
group by BorrowerID, CompanyID
order by BorrowerID asc;
我真的想知道我是否放松了整个数据集,其结构与测试相同,它会做正确的事情吗?我想知道它是否会让我失望,因为在我的简单测试中,以及我运行它的其他多个已正确通过所有测试,但我的研究组中的其他一些人有一些不同的结果,我强烈怀疑是错的,但不是100%肯定。如果你们都可以权衡,我将不胜感激。
答案 0 :(得分:1)
在任何采用单个参数的聚合函数中,该参数可以在关键字DISTINCT之后。在这种情况下,重复元素在传递到聚合函数之前被过滤。例如,函数“count(distinct X)”将返回X列的不同值的数量,而不是X列中非空值的总数。
因此,您可以使用单个查询直接执行此操作:
SELECT BorrowerID,
CompanyID,
count(DISTINCT PackageID) AS testResults
FROM testdb
GROUP BY BorrowerID,
CompanyID
ORDER BY BorrowerID,
CompanyID;