SQL Query涉及聚合函数

时间:2015-03-16 20:37:46

标签: mysql sql database subquery

我在编写此查询时遇到问题。我不知道我是否应该实际使用计数,因为它返回实际计数,我想返回那些没有进行过审核的人。无论如何,这是我想写的查询。

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;

这会返回0结果,我不认为这是正确的,因为有人可以成为用户而不是撰写评论。但我不知道我能做什么。感谢

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

Find the users that have reviewed every business.

2 个答案:

答案 0 :(得分:1)

您希望users表不是业务表。

通过将评论表添加到我们所说的用户表中 - 让我所有用户,如果他们还没有留下评论,只需将这些列留为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

答案 1 :(得分:0)

SELECT u.*
FROM users u
WHERE NOT EXISTS ( SELECT 'a'
                   FROM reviews r
                   WHERE r.user_id = u.user_id
                 )