mysql - 在 mysql 中使用 Join 计数

标签 mysql sql

所以我有这两个表,它记录了用户最喜欢什么样的食物:

用户

 ------------
 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/

相关文章:

MySQL:更新单表一列数据到另一列

mysql - mysql中具有相同主键的不同表的最大日期

sql - 不唯一的表/别名 : 'usertns_group' 1066 Please tell me if you spot the error

MySQL 将多个表中的记录插入到新表中

java - 使用 Jadiru Joda/Hibernate 持久用户类型时出现 AbstractMethodError

mysql - "sqlite_see_if_its_a_number"与 "mysql_bind_type_guessing"有什么关系?

python - 如何在使用和不使用 SQLAlchemy 的情况下处理 MySQL 上时区感知日期时间对象的 "out of range"警告

mysql - 最大表和设计模式

mysql - sql中insert语句中的select语句返回多行

c# - 具有分组依据的 Linq 查询