在Sql中计算两个列值的对,它们在表中匹配

时间:2014-10-27 11:51:04

标签: sql database

我有两张桌子

品牌表

这是特定用户选择的brand_id列表。

id_autoicrement | user_id |  brand_id 

              1 |   5     |    7
              2 |   5     |    3
              3 |   5     |    1
              4 |   9     |    3
              5 |   9     |    7
              6 |   2     |    3
              7 |   2     |    7
              8 |   4     |    3

产品表

这是特定用户选择的product_id列表。

id_autoicrement | user_id |  product_id 

              1 |   5     |    4
              2 |   5     |    1
              3 |   5     |    2
              4 |   9     |    1
              5 |   9     |    4
              6 |   2     |    1
              7 |   2     |    4
              8 |   4     |    1

修改

抱歉,我弄错了。 我想要brand_id和product_id的列表,这些列表由brand_id和product_id值相同的相同数量的用户使用。上表是相同的。

User A                              User B

brand_id  | product_id               brand_id  | product_id 

       1  | 2                               1  | 3
          | 3                               2

不同用户的相同数量的对...

User A has two pairs                              User B has two paris

brand_id 1 and product_id 2                       brand_id 1 and product_id 3
brand_id 1 and product_id 3                       brand_id 2 and product_id 3

结果应该是

brand_id  product_id -> combination
  1          2       -> 1
  1          3       -> 2
  2          3       -> 1

先谢谢。

2 个答案:

答案 0 :(得分:1)

只需按用户加入两个表格,按品牌和产品分组,即可完成。

select product_id, brand_id, count(*)
from brands b
inner join product p on p.user_id = b.user_id 
group by product_id, brand_id;

联接为每个用户 - 产品 - 品牌组合创建一条记录。然后通过产品和品牌分组,计算选择产品 - 品牌组合的用户。

这是一个SQL小提琴:http://sqlfiddle.com/#!6/f868a/2

答案 1 :(得分:0)

使用以下查询

select product_id,brand_id , product_users as count from 
(
select count(user_id) product_users, product_id from product_table
) a,
(
select count(user_id) brand_users, brand_id from brand_table
) b
where a.product_users = b.brand_users;