2009-08-29 8 views
2

私はCOUNTを返すselectサブクエリを作成しています。ただし、サブクエリでHAVING句を使用する必要があり、その結果、サブクエリのSELECTでその列を指定する必要があります。結果はCOUNTとcolumn_for_having_clauseという2つの列があります。複数の列を返すサブクエリ

私にSQLに最初の列だけを伝える方法はありますか? "オペランドには1列が含まれているはずです"というエラーが表示されます。私はこれが共通の問題でなければならないと考えています、誰もそれを回避する方法を知っていますか?

また、SELECTクエリで列を指定せずにHAVING句を実行できる方法はありますか?

ありがとうございます!

+0

これは、特定のデータセットと返品したいもので簡単に答えることができます。 – cletus

答えて

1

ただしかなり醜い

SELECT blah FROM foo WHERE bar = (SELECT cnt FROM (SELECT cnt, column_for_having_clause FROM table .... HAVING ... LIMIT 1)) 

を行うことができます。

1

確かに、HAVING句に任意の式を指定することができます。選択リストの列である必要はありません。

SELECT ... 
FROM foo 
WHERE x = (SELECT COUNT(*) FROM bar 
      GROUP BY y HAVING y = MAX(y)); 

ただし、外部クエリの何かとカウントを比較する場合は、タプルを比較することもできます。

SELECT ... 
FROM foo 
WHERE (x, 1) = (SELECT COUNT(*), y = MAX(y) AS is_max FROM bar 
       GROUP BY y HAVING is_max = 1); 
+0

お返事ありがとうございます...しかし、選択欄に列を追加するたびに「未知の列」のエラーが表示されます なぜでしょうか? –

+2

質問を編集してSQLクエリを表示すると役立ちます。 –

関連する問題