问题描述
我有以下数据库:
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;
它不包含日期,而且似乎不是最短的查询。我还能怎么做?
解决方法
这听起来像await
和join
:
count(distinct)
,
涉及2个表:transactions
和object_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'