2012-04-24 14 views
2

次のコードは、私が望むのとまったく同じ方法で動作します。今は同じタスクを達成する必要がありますが、結果はCOUNTが1より大きい場合にのみ表示されます。COUNTは、割り当てテーブル内の行ごとに異なる書籍ID(入札単価)を数えます。集計関数を使用したWHERE文を使用したSQL

Prompt Task 1E7; 
SELECT B.bid,title,COUNT(*) 
FROM ALLOCATION A 
INNER JOIN BOOK B 
ON A.bid = B.bid 
GROUP BY B.bid,title 
ORDER BY COUNT(*),bid; 

私はいくつかの異なる場所にWHERE COUNT(*)> 1を置いてみました。これはちょうどWHERE行の "SQLコマンドが正しく終了していません"というエラーを返します。私はまた、次のことを試みました。

Prompt Task 1E7; 
SELECT B.bid,title,COUNT(*) 
FROM ALLOCATION A 
INNER JOIN BOOK B 
ON A.bid = B.bid 
GROUP BY B.bid,title 
WHERE (SELECT COUNT(*) 
FROM ALLOCATION A 
INNER JOIN BOOK B 
ON A.bid = B.bid 
GROUP BY B.bid,title) > 1 
ORDER BY COUNT(*),bid; 

など、いくつかの小さな調整があります。

+0

group byを使用すると、通常は 'where'ではなく' having'を使用します。違いを見てください。 –

答えて

0

あなたは他のポスターが提案同じようにHAVING句を使用する必要がGROUP BY

+0

Shit。私はあなたがいない、私はちょうどHAVINGを発見した。 T__T – Ruzzy

2

集約はHAVINGで濾過することができます。

SELECT B.bid, title, COUNT(*) cnt 
FROM ALLOCATION A 
INNER JOIN 
     BOOK B 
ON  A.bid = B.bid 
GROUP BY 
     B.bid, title 
HAVING COUNT(*) > 1 
ORDER BY 
     cnt, bid; 
0

でロールアップした後の値でフィルタリングHAVING句を、したいです。 今後参考になるように、これはSQLコマンドの非常に良いリファレンスです:http://www.1keydata.com/sql/sql.html

関連する問題