2016-07-04 6 views
0

私はこれに多くの似たような疑問を見つけました。基本的には、グループ化する必要があります。すべての列は関数によって集計されません。それでも、これはうまくいかないようです。グループではありません

select UC.executionTime as executionTime, 
     UC.aggregationTime as aggregationTime, 
     UC.totalTime as totalTime, 
     case when UC.numberExecutions <= UD.NUMBEREXECUTIONS then UC.numberExecutions 
      else UD.NUMBEREXECUTIONS 
      end as numberExecutions, 
     (avg(UD.AVERAGETIME)*(count(UD.AVERAGETIME))+avg(UC.executionTime))/((count(UD.AVERAGETIME))+1.0) as averageTime, 
     UC.layer as layer, 
     UC.domain as domain, 
     UC.name as name, 
     UC.componentType as componentType, 
     UC.operation as operation, 
     UC.version as version, 
     "UseRateDay" as indicator 
    from UCtable as UC, USE_RATE_DAY as UD 
    where UC.name=UD.NAME and UC.layer=UD.LAYER 
     and UC.domain=UD.DOMAIN and UC.componentType=UD.COMPONENTTYPE 
     and UC.operation=UD.OPERATION AND UC.version=UD.VERSION and UC.indicator="UseRateDay" and (floor(UC.executionTime/(24*60*60*1000))*(24*60*60*1000) <= UD.EXECUTIONTIME and (ceil(UC.executionTime/(24*60*60*1000)) * (24*60*60*1000))*2 > UD.EXECUTIONTIME) 
    group by executionTime, aggregationTime,totalTime, numberExecutions,layer, domain, componentType, name, operation, version 

どこが紛失していますか?

+0

'GROUP BY'の' indicator'カラムはありますか? – Mchl

+1

は動作していないようですが、非常に曖昧です!具体的に構文を動作させていないのは何ですか?予想される集計結果は?いくつかのサンプルデータと、そのデータに基づいたサンプルの期待結果を含めるとよいでしょう。 – Matt

+0

インジケータの有無にかかわらず、式によるグループではなく、グループ内の選択からのステートメントが欠落しています。 – Elsendion

答えて

1

実行回数 UCとUDのエイリアスになっている各テーブルに1つずつ(stmtの場合に使用される)の列が1つあります。

明示的に次のように記載されているこれらの2つのカラムを持つ必要があることでので、あなたのグループ:

group by UC.numberExecutions , UD.NUMBEREXECUTIONS , other columns 

あなたが現在句によって、グループ内のいずれか一方のみのnumberExecutionsが含まれていると、あなたはそれをエイリアスしていないので...です問題を引き起こします。それをエイリアスにすると、グループ内の他の不足している列について、必要に応じて不平を言うでしょう。

また、インジケータ列は静的な値であるため、グループ内では必要ありません。

そして最も重要なのは、混乱を避けるために、いつでもカラムをエイリアスする必要があることです。これは単なる良い方法です。

関連する問題