mysql:连接2个表并计算多个计数&排序结果

时间:2014-05-31 09:53:24

标签: mysql

我是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对结果进行分组,因此我丢失了所有许可证信息......

0 个答案:

没有答案