我有两张桌子:
r1,主键为k1。
r2,辅助密钥k1(来自r1表)重复授权。
r2可以有几行,其中k1作为辅助键,因此可以在其上执行求和。
示例:
r1 =
(NationalID| Name | Surname | Age)
(9854512| Smith| Ben | 27)
(5454544| Khan | Michel | 29)
(...................)
r2 =
(DrivingPenaltyNumber | NationalID | DrivingPenaltyValue )
(1 |9854512 | 10 )
(2 |5454544 | 5 )
(3 |9854512 | )
(..................................................................)
我想在一个包含两列的表中加入这两个表:主键k1 = NationalID,r2中k1的出现次数(每个人的驾驶罚分数),给定的总和r2中的变量(每个人的罚金总和),然后过滤累积罚分高于边界的线。所以,我想在不创建中间表的情况下同时进行连接,组合,调节操作。这是正确和最佳的解决方案吗?
select r1.NationalID, count(r2.NationalID) as numberOfPenalties, sum(r2.DrivingPenaltyValue) as totalPenalty
from r1
left join r2
on r1.NationalID= r2.NationalID
group by r1.NationalID
having count(r2.DrivingPenaltyValue) > boundary
此外,是否可以使用而不是?如何 ?你能帮忙,也许可以提供参考。
答案 0 :(得分:1)
如果我理解你的要求是正确的,那么你实际上并不需要加入r1
。您可以使用GROUP BY
,COUNT()
和HAVING
来获取每个密钥的出现次数超过阈值。我只是在一个变量中存储一个阈值。你可以做任何你想做的事。
SET @threshold = 10; /* you can change this */
SELECT k1, COUNT(1) num_occurrences FROM r2 GROUP BY k1 HAVING num_occurrences >
@threshold;
您可以在执行上述查询后LEFT JOIN
返回r1
,以查找超过/低于阈值的密钥。