SQL联合和组同时进行

时间:2016-11-13 15:21:43

标签: mysql sql

我有两张桌子:

  • 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

此外,是否可以使用而不是?如何 ?你能帮忙,也许可以提供参考。

1 个答案:

答案 0 :(得分:1)

如果我理解你的要求是正确的,那么你实际上并不需要加入r1。您可以使用GROUP BYCOUNT()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,以查找超过/低于阈值的密钥。