mysql查询输出购买过该用户购买过的任意同款车型的人数

标签 mysql

购买的模型

user_id model_id
1   1
1   4
1   9
1   3
2   3
2   2
2   7
2   4
3   9
3   6

3   1
3   5
4   8
4   7
4   9
4   1
5   8
5   9

利用上表,编写一个查询,输出一个表,该表的列分别是user_id、用户购买的型号、以及购买了与该用户购买的相同型号的人数。结果应该如下所示:

结果

user_id models_purchased    users_purchasing_same_models
1                  4           4
2                  4           2
3                  4           3
4                  4           4
5                  2           3

获得前两个:

SELECT
                    DISTINCT user_id,
                    COUNT(DISTINCT model_id)
                FROM 
                    purchased_models
                GROUP BY user_id

,但是第三个遇到了麻烦。任何帮助将不胜感激。谢谢!

最佳答案

实现此目的的一种方法是使用相关子查询,该子查询对已购买外部范围中引用的用户已购买的任何模型的用户的不同数量进行计数:

select 
    t1.user_id, 
    count(distinct t1.model_id) models_purchased, 
    (
       select count(distinct user_id)
       from purchased_models t2 
       where t2.model_id in (
          select model_id 
          from purchased_models 
          where user_id = t1.user_id 
            and t2.user_id <> t1.user_id
       )
    ) users_purchasing_same_models 
from purchased_models t1
group by t1.user_id
order by t1.user_id

关于mysql查询输出购买过该用户购买过的任意同款车型的人数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28918208/

相关文章:

mysql - 读取器仅从 MySQL 数据库中选择空字段 - 错误消息 : The Value cannot be NULL Paramter: Item

php - 如何回显所有行和所有列?

php - 创建数据库表的文件

php - 注释未插入 MySQL 表中

c# - 如何在 Visual Studio 2019 中连接到 MySQL 数据源?

Mysql 和 codeigniter 加载非常慢

php - 在插入查询中选择查询

php - PHP 和 MySQL 中唯一访问次数的有效计数器

php - 通过 POST 发送到 PHP 的 Flex 数据未发送到 MySQL 数据库

MySQL - 在条件语句中使用 *