在SQL Azure“导入数据”中对表进行分组时编写数学公式

问题描述 投票:0回答:2

此查询工作正常

select OrderForSeries.memberid, 
       Orderforseries.seriesid  ,
       log(count(orderforcontent.id)) as rating,
       Series.Mainauthorid, 
       series.Likecount, 
       series.viewcount
 from series join  OrderForSeries on OrderForSeries.SeriesId=Series.id
 join orderforcontent on orderforcontent.OrderForSeriesid=OrderForSeries.id
 group by  OrderForSeries.memberid, orderforseries.seriesid  ,
      Series.Mainauthorid, series.Likecount, series.viewcount 
 order by OrderForSeries.seriesid

但是当我将第三行中的“series.view count”更改为log(series.view count)时,我得到了错误。我认为这是因为GRUOP的查询。我如何在这里使用日志功能?

我正在使用Microsoft Azure'导入数据'但是当我使用Visual Studio时,它运行正常

这是错误:

requestId = 96da06356e5d42b6bf5aede3170f718f errorComponent=Module.
taskStatusCode=400. 
{"Exception":
    { "ErrorId":"InvalidSQLScript",
      "ErrorCode":"0069",
      "ExceptionType":"ModuleException",
      "Message":"Error 0069: SQL query \" 
        select top 75000
          OrderForSeries.memberid, 
          Orderforseries.seriesid ,
          log(count(orderforcontent.id)) as rating,
          Series.Mainauthorid, 
          series.Likecount,
          log(series.viewcount)
        from series 
        join OrderForSeries on OrderForSeries.SeriesId=Series.id
        join orderforcontent on orderforcontent.OrderForSeriesid=OrderForSeries.id
        group by OrderForSeries.memberid, orderforseries.seriesid ,
          Series.Mainauthorid, series.Likecount, series.viewcount
        order by OrderForSeries.seriesid
    " is not correct:
    ??? ?? ??? ??? ??????.
    Please double check your query against your database."
    }
}
Error: Error 0069: 
  SQL query " .... " is not correct:
  ??? ?? ??? ??? ??????.
  Please double check your query against your database. 
Process exited with error code -2 
sql azure
2个回答
2
投票

你应该在log后面加上GROUP BY函数。大多数数据库系统都要求聚合函数之外的属性或表达式需要在GROUP BYSELECT之后。

select OrderForSeries.memberid, 
       Orderforseries.seriesid  ,
       log(count(orderforcontent.id)) as rating,
       Series.Mainauthorid, 
       series.Likecount, 
       log(series.viewcount)
 from series join  OrderForSeries on OrderForSeries.SeriesId=Series.id
 join orderforcontent on orderforcontent.OrderForSeriesid=OrderForSeries.id
 group by  OrderForSeries.memberid, 
       Orderforseries.seriesid  ,
       Series.Mainauthorid, 
       Series.Likecount, 
       log(Series.viewcount)
 order by OrderForSeries.seriesid

1
投票

不确定你正在使用什么DBMS - MS SQL能够处理这个问题。

在任何情况下,如果您的数据库无法在分组字段上执行log()等操作,则有两个选项。

选项A - 使用子查询

没有什么能阻止你写作

select fieldA, fieldB, log(fieldC)
from
(
    select fieldA, fieldB, fieldC from somewhere
) as subQ

...换句话说,使用子查询生成原始数据,然后使用更高级别的查询来执行要对其执行的数学运算。

选项B - 也将Group-By更改为Log()。

如果引擎不允许您在分组依据字段上执行功能,则始终可以将该功能添加到group by子句中。

Select fieldA, log(fieldB)
from somewhere
group by fieldA, log(fieldB)
© www.soinside.com 2019 - 2024. All rights reserved.