SQL 涉及聚合函数的查询

SQL Query involving aggregate functions

我在编写此查询时遇到问题。我不知道我是否应该实际使用计数,因为 return 是实际计数,我想 return 没有做过评论的人。无论如何,这是我正在尝试编写的查询。

Find those users that haven’t reviewed any businesses.

我使用的表格是

reviews;
+-------------+---------+------+-----+---------+-------+
| Field       | Type    | Null | Key | Default | Extra |
+-------------+---------+------+-----+---------+-------+
| business_id | int(11) | NO   | PRI | NULL    |       |
| user_id     | int(11) | NO   | PRI | NULL    |       |
| review_id   | int(11) | NO   | PRI | NULL    |       | 
| review_date | date    | YES  |     | NULL    |       |
| star_rating | int(1)  | YES  |     | 1       |     


businesses
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| business_id  | int(11)      | NO   | PRI | NULL    |       |
| name         | varchar(50)  | YES  |     | NULL    |       |
| city         | varchar(40)  | YES  |     | NULL    |       |
| state        | varchar(20)  | YES  |     | NULL    |       |
| full_address | varchar(120) | YES  |     | NULL    |       |

users;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| user_id    | int(11)     | NO   | PRI | NULL    |       |
| name       | varchar(50) | YES  |     | NULL    |       |
| user_since | date        | YES  |     | NULL

这是我目前的情况

SELECT reviews.user_id FROM reviews
JOIN businesses ON (reviews.business_id = businesses.business_id)
GROUP BY reviews.user_id ASC
HAVING COUNT(*) > 0;

这 returns 0 个结果,我认为这是不对的,因为有人可以成为用户而不写评论。但我不知道我还能做什么。谢谢

编辑:我想出了最后一个查询,但现在我正在尝试完成这个查询!

Find the users that have reviewed every business.

您想要用户 table 而不是企业 table。

通过将评论 table 留给用户 table 我们的意思是 - 获取所有用户,如果他们没有留下评论,请将这些列保留为 NULL。然后在 where 子句中,我们只选择那些评论列为空的结果,从而选择没有留下评论的用户。

select u.User_ID 
from 
    users u
    left join reviews r
        on r.user_id = u.user_id
where r.review_id is null
SELECT u.*
FROM users u
WHERE NOT EXISTS ( SELECT 'a'
                   FROM reviews r
                   WHERE r.user_id = u.user_id
                 )