我正在处理sql查询,
查询:
我想找到一个医院名单,上面有牙医(is_denitist=true)和所有月收入>100000的医生(包括牙医)
我有两张table,医院和医生的图表如下,
-------------
| Hospital |
|-----------|
| id | name |
|-----------|
---------------------------------------------------------
| Doctor |
|--------------------------------------------------------
| id | name | monthly_income | is_dentist | hospital_id |
|--------------------------------------------------------
我提出的问题是,
select h.name, count(d.is_dentist), sum(d.monthly_income)
from Hospital h inner join Doctor d
on h.id = d.hospital_id
where d.monthly_income > 100000 and d.is_dentist=true
group by h.name;
如果我是一名牙医,收入低于10万,那么医院仍应将我算作牙医。
但上述查询中需要注意的是,它过滤掉了所有月收入在10万以上的医生和牙医。我需要这些条件的独立计数,比如每个count()列上的 predicate 。如何在单个查询中实现这一点?
2条答案
按热度按时间5hcedyr01#
你可以做条件聚合。
自
is_dentist
(大概)包含0
/1
价值观,你可以sum()
这一栏用来统计有多少医生属于这个组。另一方面,可以使用另一个条件
sum()
统计一下有多少医生的收入超过了门槛。woobm2wo2#
您有两个独立的条件(月收入>100000,并且为true),这意味着有两个不同的数据集。不能在同一组查询中使用两个不同的数据集。所以你需要把它分成两个子查询。您可以检查以下查询结果是否是您想要的: