【问题标题】:Writing an sql query that uses count编写一个使用 count 的 sql 查询
【发布时间】:2015-03-16 17:58:43
【问题描述】:

我正在尝试编写一个利用 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

【问题讨论】:

  • 如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。
  • "reviews.business_id = is_a_restaurant"?
  • 冷静一下,我为什么在那条法律之后没有写.business_id
  • @BobblyFillay 如果只是一个错字,我建议编辑问题。

标签: mysql sql database join subquery


【解决方案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 中的列名。

【讨论】:

    【解决方案2】:

    您需要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
    

    【讨论】:

      【解决方案3】:

      count() 是一个聚合函数。 SQL 聚合函数是那些返回单个值的函数,从列中的值计算得出。不能将 where 子句与聚合函数一起使用。相反,您必须使用 having 子句。 以下是最常用的聚合函数。

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

      所以,使用有而不是在哪里。 保重,祝你好运....!!

      【讨论】:

        猜你喜欢
        • 2022-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-07
        • 1970-01-01
        相关资源
        最近更新 更多