【问题标题】:Error in count/group by for query inside another query另一个查询中的查询计数/分组错误
【发布时间】:2021-12-26 06:03:27
【问题描述】:

我正在尝试从该数据库中提取特定年份发布的评分总数:

这是我输入的用于提取此号码的代码:

SELECT Count(*) NrOfRatings
FROM (SELECT timestamp, FROM_UNIXTIME(timestamp) as datetime, 
CAST(FROM_UNIXTIME(timestamp) as date) AS date_value 
FROM ratings
WHERE year(CAST(FROM_UNIXTIME(timestamp) as date) )=2000) NrOfRatings
GROUP BY NrOfRatings;

我认为问题出在与 count 函数关联的函数GROUP BY 上。我尝试按movieIdtimestamp 和其他人进行分组,但似乎没有任何效果。

【问题讨论】:

  • 请分享上述数据集的预期输出
  • 您实际上并没有说明您看到的错误是什么,但无论如何您的 SQL 比它需要的复杂得多。您需要做的只是(伪代码不是实际的 SQL): select count(1) from table where year(timestamp) = 2000

标签: mysql sql group-by count


【解决方案1】:

不需要对计数功能进行分组。
可以按 COUNT、MIN、MAX、AVG 等聚合函数中没有的内容进行分组...

例如,按计算年份分组

select 
 year(from_unixtime(`timestamp`)) as `year`, 
 count(*) as NrOfRatings
from ratings
where year(from_unixtime(`timestamp`)) = 2000
group by `year`

额外:

要查询更多年份,请使用IN

where year(from_unixtime(`timestamp`)) IN (2000,2002,2004) 

BETWEEN 表示范围:

where year(from_unixtime(`timestamp`)) BETWEEN 2000 AND 2020

【讨论】:

    【解决方案2】:

    您想要的是对同一年发生在要分组的多行中的评分数进行计数并获得评分计数。

    如果您希望它仅用于特定的一年,则可以按照以下方式进行

    select count(1) from Ratings where year(CAST(FROM_UNIXTIME(timestamp) as date))=2000

    但是,如果您想知道每组年份的收视率计数,则需要根据年份对数据进行分区,而不仅仅是对其进行计数。

    SELECT *,year(CAST(FROM_UNIXTIME(timestamp) as date)) as yearForTimeStamp,
    COUNT(*) Over(Partition by year(CAST(FROM_UNIXTIME(timestamp) as date))) as
    NoOfRating 
    FROM Ratings
    

    Running query with example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多