簡體   English   中英

涉及聚合函數的SQL查詢

[英]SQL Query involving aggregate functions

我在編寫此查詢時遇到問題。 我不知道我是否應該實際使用計數,因為這將返回實際計數,並且我想返回尚未進行審核的人員。 無論如何,這是我要寫的查詢。

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.

您希望用戶表而不是業務表。

通過將評論表加入用戶表,我們是說-讓我成為所有用戶,如果他們還沒有留下評論,則將這些列留為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
                 )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM