编写一个使用计数的 sql 查询

Writing an sql query that uses count

我正在尝试编写一个利用 sql 中的计数的查询。我要写的查询是。

Find users that reviewed at least 2 restaurants.

这是我正在使用的表格:

explain is_a_restaurant;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| business_id  | int(11)     | NO   | PRI | NULL    |       |
| cuisine_type | varchar(20) | YES  |     | NULL    |       |
| total_seats  | int(11)     | YES  |     | 1       |       |
+--------------+-------------+------+-----+---------+-------+


explain 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       |       |
 +-------------+---------+------+-----+---------+-------+


 explain 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 is_a_restaurant ON 
(reviews.business_id = is_a_restaurant) WHERE (count(*).is_a_restaurant > 1) 
GROUP BY reviews.user_id ASC;

这是我得到的错误

You have an error in your SQL syntax; check the manual that corresponds to 
your MySQL server version for the right syntax to use
near '.is_a_restaurant > 1) GROUP BY reviews.user_id ASC' at line 1

您需要 HAVING 子句。

SELECT reviews.user_id 
FROM reviews
JOIN is_a_restaurant ON (reviews.business_id = is_a_restaurant.business_id)
GROUP BY reviews.user_id ASC
HAVING count(*) > 1

我不是 MySQL 人,所以我的语法可能有点不合时宜,但您可能想使用 HAVING 子句。

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

HAVING 子句类似于 WHERE 子句,但用于聚合值(在本例中为 COUNT)。

您还缺少 JOIN 表达式中 is_a_restaurant 的列名。

count() 是一个聚合函数。 SQL 聚合函数是那些return 单个值,从column.You 中的值计算得到的函数不能使用带有聚合functions.Instead 的where 子句,你必须使用having 子句。 以下是最常用的聚合函数。

  1. AVG() - Returns 平均值
  2. COUNT() - Returns行数
  3. FIRST() - Returns 第一个值
  4. LAST() - Returns 最后一个值
  5. MAX() - Returns 最大值
  6. MIN() - Returns 最小值
  7. SUM() - Returns 总和

所以,用 having 代替 where。 保重,祝你好运....!!