所以我有这两个表,它记录了用户最喜欢什么样的食物:
用户
表
------------
id | country
------------
1 | US
2 | PH
3 | US
4 | US
5 | PH
food_favourites
表
-----------------
food_id | user_id
-----------------
3 | 1
7 | 1
3 | 2
3 | 3
3 | 4
我想知道有多少来自美国的唯一身份用户将 food_id 3 标记为他们的最爱。
到目前为止我有这个查询:
select *, count(user_id) as total
from food_favourite
inner join users on users.id = food_favourites.user_id
where food_favourites.food_id = 3
and users.country = 'US'
group by users.id
嗯,这行不通,因为它将 total
返回到 4 而不是 3。
我也试过做子查询——不走运,我想我遗漏了什么。
最佳答案
DROP TABLE IF EXISTS users;
CREATE TABLE users
(user_id SERIAL PRIMARY KEY
,country CHAR(2) NOT NULL
);
INSERT INTO users VALUES
(1,'US'),
(2,'EU'),
(3,'US'),
(4,'US'),
(5,'EU');
DROP TABLE IF EXISTS favourite_foods;
CREATE TABLE favourite_foods
(food_id INT NOT NULL
,user_id INT NOT NULL
,PRIMARY KEY(food_id,user_id)
);
INSERT INTO favourite_foods VALUES
(3,1),
(7,1),
(3,2),
(3,3),
(3,4);
SELECT COUNT(DISTINCT u.user_id) distinct_users
FROM users u
JOIN favourite_foods f
ON f.user_id = u.user_id
WHERE u.country = 'US'
AND f.food_id = 3;
+----------------+
| distinct_users |
+----------------+
| 3 |
+----------------+
关于mysql - 在 mysql 中使用 Join 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49070347/