Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 检索最早日期的平均值_Mysql_Sql - Fatal编程技术网

Mysql 检索最早日期的平均值

Mysql 检索最早日期的平均值,mysql,sql,Mysql,Sql,我正在练习MySQL,我正在尝试解决一个练习。我有数据包含对酒店的评论。数据包含不同用户的评论:如果一个用户访问了多次,那么他们可以有很多评论。每个审查都有自己的id,然后审查1到5之间的值 评论也有日期,现在我想计算第一次访问的平均评论最早的日期。我的问题是,我试图检索最早日期的方法实际上不起作用。我的意思是,无论使用have还是WHERE方法,我都能得到相同的结果。有人能帮我吗?谢谢 这是我用have和WHERE方法尝试的查询 下面是一个数据示例 user_id | id | ro

我正在练习MySQL,我正在尝试解决一个练习。我有数据包含对酒店的评论。数据包含不同用户的评论:如果一个用户访问了多次,那么他们可以有很多评论。每个审查都有自己的id,然后审查1到5之间的值

评论也有日期,现在我想计算第一次访问的平均评论最早的日期。我的问题是,我试图检索最早日期的方法实际上不起作用。我的意思是,无论使用have还是WHERE方法,我都能得到相同的结果。有人能帮我吗?谢谢

这是我用have和WHERE方法尝试的查询

下面是一个数据示例

  user_id  | id  |  rooms_rating  | service_rating  |  location_rating  | value_rating |    date  
---------------------------------------------------------------------------------------
 matt21   |  123  |       4        |        5        |         2         |      4       |  2007-08-20

您可以在不存在的情况下执行此操作:

SELECT AVG(r.overall_rating), AVG(r.rooms_rating), AVG(r.service_rating), AVG(r.location_rating), AVG(r.value_rating)
FROM reviews r
WHERE NOT EXISTS (SELECT 1 FROM reviews WHERE user_id = r.user_id AND date < r.date)
这个

不能工作。假设表中的最小日期为“2020-01-01”,那么“2020-01-01”是什么意思

这个

很接近,但它不是每个ID的最小日期,而是您想要的每个用户ID的最小日期。如果用user_id替换id,那么仍然存在问题,因为一个用户的第一个日期可能是另一个用户的第三个日期

以下是更正的查询:

SELECT
  AVG(overall_rating), AVG(rooms_rating),
  AVG(service_rating), AVG(location_rating), AVG(value_rating)
FROM reviews
WHERE (user_id, review_date) IN 
         (SELECT user_id, MIN(review_date) FROM reviews GROUP BY user_id);

你的数据没有多大意义。该表缺少id\u user之类的内容。如果无法将审核分配给用户,则无法为每个用户选择最早的审核。将只有一个最早的审查,这是没有意义的计算平均值从一个记录。对不起,我忘了包括它。我的数据包含用户ID
SELECT ...
FROM reviews
HAVING MIN(review_date)
SELECT ...
FROM reviews
WHERE review_date IN (SELECT MIN(review_date) FROM reviews GROUP BY id);
SELECT
  AVG(overall_rating), AVG(rooms_rating),
  AVG(service_rating), AVG(location_rating), AVG(value_rating)
FROM reviews
WHERE (user_id, review_date) IN 
         (SELECT user_id, MIN(review_date) FROM reviews GROUP BY user_id);