【问题标题】:SQL: How to join two tables and extract the data by timestamp?SQL:如何连接两个表并按时间戳提取数据?
【发布时间】:2022-09-18 02:48:20
【问题描述】:

我正在使用mysql。我有两张表,一张是关于电影类型的,另一张是关于带有时间戳的电影评级。我想将这两个表与电影 id 连接在一起,以计算每种电影的平均评分。我试图只提取每部电影至少有 10 个评分的电影类型和 12 月的评分,并按平均评分从高到低排序。

表“类型”

movieId type
1 Drama
2 Adventure
3 Comedy
... ...

表“评分”

movieId rating timestamp
1 1 851786086
2 1.5 1114306148
1 2 1228946388
3 2 850723898
1 2.5 1167422234
2 2.5 1291654669
1 3 851345204
2 3 944978286
3 3 965088579
3 3 1012598088
1 3.5 1291598726
1 4 1291779829
1 4 850021197
2 4 945362514
1 4.5 1072836909
1 5 881166397
1 5 944892273
2 5 1012598088
... ... ...

预期结果:(Nb 评级 >= 10 和 12 月给出的评级)

type Avg_Rating
Drama 3.45

我正在尝试编写如下查询,但我无法执行它。 (原表约1万条数据) 我应该在哪里调整我的查询?

SELECT DISTINCT T.type, AVG(R.rating) FROM types AS T
INNER JOIN ratings AS R ON T.movieId = R.movieId
WHERE R.timestamp LIKE (
    SELECT FROM_UNIXTIME(R.timestamp,'%M') AS Month FROM ratings
    GROUP BY Month
    HAVING Month = 'December')
GROUP BY T.type
HAVING COUNT(R.rating) >=10
ORDER BY AVG(R.rating) DESC;

【问题讨论】:

    标签: mysql sql timestamp subquery


    【解决方案1】:

    我看到两个问题:

    1. timestamp LIKE - 那应该做什么? 和
    2. 使用 GROUP BY by 的内部查询,没有任何聚合。也许你的意思是在哪里?无论如何,您根本不需要它 - 只需直接在时间戳上对 12 月进行相同的检查,不带 LIKE 和不带子查询
      SELECT DISTINCT T.type, AVG(R.rating) FROM
      types AS T INNER JOIN ratings AS R 
      ON T.movieId = R.movieId
      WHERE FROM_UNIXTIME(R.timestamp,'%M')  = 'December' 
      GROUP BY T.type
      HAVING COUNT(R.rating) >=10
      ORDER BY AVG(R.rating) DESC;
      
      

    【讨论】:

      【解决方案2】:

      您可以尝试下一个查询。

      SELECT DISTINCT T.type, AVG(R.rating) FROM types AS T
      INNER JOIN ratings AS R ON T.movieId = R.movieId
      GROUP BY T.type
      HAVING 
          COUNT(R.rating) >= 10 -- have 10 or more rating records
          AND SUM(MONTH(FROM_UNIXTIME(R.timestamp)) = 12) > 0 -- have at least one rating in December
      ORDER BY AVG(R.rating) DESC;
      

      sqlize

      【讨论】:

        猜你喜欢
        • 2019-11-01
        • 1970-01-01
        • 2020-10-29
        • 2021-03-31
        • 1970-01-01
        • 1970-01-01
        • 2013-12-09
        • 1970-01-01
        • 2017-10-03
        相关资源
        最近更新 更多