我是MySQL的初学者,遇到了一个我无法解决的问题。我希望你们知道如何帮助我。
我有两张桌子。第一个表X将用户映射到他们的车牌:
user_id | license_id
1 | a
1 | b
1 | c
2 | d
2 | e
...
第二张表Y将牌照映射到保险:
license_id | insurance_id | year
a | i1 | 2001
a | i2 | 2002
a | i3 | 2003
a | i2 | 2004
b | i2 | 2002
b | i2 | 2003
d | i2 | 2003
d | i2 | 2004
d | i2 | 2005
e | i3 | 2004
...
我想以有效的方式回答以下问题,因为表格相当大:
给定一组保险(i1,i2),告诉我那些至少注册了其中一个的用户。按匹配保险的数量排序,但使用相同的保险(因为不同的许可证ID)只对同一用户的多次注册计数一次。此外,对于每个用户,在给定用户和上述保险集的情况下,向我显示显示最多保险匹配的许可证ID,但不在此明确计算。
让我说我有保险套装(i1,i2),然后我希望结果如下:
user_id | num_matches | license_id | num_matches_license_id
1 | 2 | a | 3
2 | 1 | d | 3
截至目前,我已经实现了对用户匹配的计算:
SELECT X.user_id as user_id, Y.license_id as license_id, Y.insurance_id as insurance_id, COUNT(DISTINCT insurance_id) as num_matches
FROM Y
JOIN X ON X.license_id=Y.license_id
WHERE Y.license_id IN (i1,i2)
GROUP BY user_id
ORDER BY num_matches DESC
我还没有理解如何包含许可证匹配?由于我正在为user_id对结果进行分组,因此我丢失了所有许可证信息......