【发布时间】:2016-01-13 16:44:41
【问题描述】:
我在学校有一个数据库项目,我几乎完成了。我唯一需要的是平均每天的电影。我有一个观看历史记录,您可以在其中找到观看过电影的用户。说明是从观看历史中过滤掉平均每天看 2 部电影的人。
我编写了以下 SQL 语句。但每次我得到错误。有人可以帮我吗?
SQL:
SELECT
customer_mail_address,
COUNT(movie_id) AS AantalBekeken,
COUNT(movie_id) / SUM(GETDATE() -
(SELECT subscription_start FROM Customer)) AS AveragePerDay
FROM
Watchhistory
GROUP BY
customer_mail_address
错误:
消息 130,第 15 级,状态 1,第 1 行
无法对包含聚合或子查询的表达式执行聚合函数。
我尝试了一些不同的方法,这个查询总结了每天的电影总数。现在我需要所有内容的平均值,并且该 SQL 仅显示平均每天有超过 2 部电影的客户。
SELECT
Count(movie_id) as AantalPerDag,
Customer_mail_address,
Cast(watchhistory.watch_date as Date) as Date
FROM
Watchhistory
GROUP BY
customer_mail_address, Cast(watch_date as Date)
【问题讨论】:
-
我怀疑这个查询是否会做你真正想要的,即使你修复了语法错误。尝试编辑问题并提供示例数据和所需结果。
-
你应该看看 AVG() 函数和 HAVING 子句。
-
我收到错误消息,我无法对包含聚合或子查询的表达式执行聚合函数,我自己认为这确实是获取每天平均值的正确方法。但是这个错误很烦人:p
-
@TomH Yeahh 我试过了,但查询需要立即获取订阅开始日期和日期,以便它可以获取订阅开始时每天的平均值。
-
我不确定这个,所以我不会将此作为解决方案发布,但是我认为您需要将查询“SELECT subscription_start FROM Customer”限制为特定客户。类似于“从 Customer.ID = WatchHistory.CustomerID 的客户中选择订阅开始”。然而,即使在这种情况下,我也不认为这会起作用,因为 select 是一个子查询,而 SQL Server 似乎不允许这样做。
标签: sql sql-server database ms-access average