0

誰かがこれが機能する理由を私に説明できますか?

select val1, val2, 
   count(case when table2.someID in (1, 2, 3, 48967, 123456) then table2.someId end) as val3
from table1
join table2 on table1.someId = table2.someId
where blabla
group by val1, val2
order by val1

しかし、このクエリはここにあります:

select val1, val2, 
   count(case when table2.someID in (Select someId from table567) then table2.someId end) as val3
from table1
join table2 on table1.someId = table2.someId
where blabla
group by val1, val2
order by val1

エラーが発生します:

集計またはサブクエリを含む式に対して集計関数を実行することはできません。

someIdのPKですtable2

4

2 に答える 2

4

「 (...)サブクエリを含む式で集計関数を実行できない」場合、理由は単純です。2番目のクエリではSelect someId from table567、集計関数にサブクエリ()がcountあり、最初はありません。

于 2012-06-18T07:45:26.353 に答える
3

サブクエリではなく左結合を使用することで、これを回避できます。

select  val1, 
        val2, 
        count(table567.someID) as val3
from    table1
        join table2 on table1.someId = table2.someId
        left join table567 on table2.someID = table567.someID
where blabla
group by val1, val2
order by val1
于 2012-06-18T07:54:00.700 に答える