SQL最短查询,以计算唯一身份用户

问题描述

我有以下数据库:

    Table users: 
-  user_id VARCHAR *primary key 
-  registration_date DATE 
-  last_active_date DATE 
-  country VARCHAR 
-  is_subscriber BOOLEAN  
    
    Table activity: 
-  activity_id VARCHAR *primary key 
-  activity_date DATE 
-  activity_name VARCHAR 
-  user_id VARCHAR  
    
    Table object_info: 
-  object_id VARCHAR *primary key 
-  object_name VARCHAR 
-  object_cost FLOAT 
-  is_discount BOOLEAN
    
    Table transactions: 
-  transaction_id VARCHAR *primary key 
-  transaction_date DATE 
-  object_id VARCHAR *references object_information.objectt_id 
-  user_id VARCHAR *references users.user_id

我想编写一个查询,计算2020年12月12日购买椅子(对象名称=椅子)的唯一身份用户数。我认为应该是这样的:

SELECT COUNT(object_name),user_id
FROM object_info
GROUP BY user_id;

它不包含日期,而且似乎不是最短的查询。我还能怎么做?

解决方法

这听起来像awaitjoin

count(distinct)
,

涉及2个表:transactionsobject_info,因此必须将它们联接起来以获取对象的名称,然后进行汇总:

select count(distinct t.user_id) counter
from transactions t inner join object_info o
on o.object_id = t.object_id
where t.transaction_date = '2020-08-12' and o.object_name = 'chair'

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...