编写一个使用计数的 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 子句。
以下是最常用的聚合函数。
- AVG() - Returns 平均值
- COUNT() - Returns行数
- FIRST() - Returns 第一个值
- LAST() - Returns 最后一个值
- MAX() - Returns 最大值
- MIN() - Returns 最小值
- SUM() - Returns 总和
所以,用 having 代替 where。
保重,祝你好运....!!
我正在尝试编写一个利用 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 子句。 以下是最常用的聚合函数。
- AVG() - Returns 平均值
- COUNT() - Returns行数
- FIRST() - Returns 第一个值
- LAST() - Returns 最后一个值
- MAX() - Returns 最大值
- MIN() - Returns 最小值
- SUM() - Returns 总和
所以,用 having 代替 where。 保重,祝你好运....!!