我有一个看起来像这样的SQL表:
+----+-----------+------------+ | Id | EnquiryId | PropertyId | +----+-----------+------------+ | 1 | 1 | 20 | | 2 | 1 | 25 | | 3 | 1 | 26 | | 4 | 2 | 20 | | 5 | 3 | 20 | | 6 | 4 | 20 | +----+-----------+------------+
我想计算一下propertyid 20有多少查询,以及与其他属性共享多少查询
所以结果应该是这样的:
单个工程数:3
共享查询次数:1
如果它需要两个选择语句,那就完全没问题:)
到目前为止的尝试看起来像这样:
(select count(distinct [EnquiryId])
from [EnquiryProperty] where propertyid=20) as 'SingleEnquiry'
Run Code Online (Sandbox Code Playgroud)
这给了我4个结果(我需要它3)
(select count([PropertyId]) FROM [EnquiryProperty] where propertyid=20 GROUP BY propertyid HAVING COUNT(*) > 1) as 'MultipleEnquiry'
Run Code Online (Sandbox Code Playgroud)
这给了我0个结果
一种方法是两级聚合.内层为每个查询分配标志.第二个用它来获取你想要的信息:
select sum(is_20 * (1 - is_not_20)) as single_enquiry,
sum(is_20 * is_not_20) as shared_enquiry
from (select enquiryid,
max(case when propertyid = 20 then 1 else 0 end) as is_20,
max(case when propertyid <> 20 then 1 else 0 end) as is_not_20
from t
group by enquiryid
) e;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |