2012-03-14 18 views
2

私は出版社のデータベースを使用しています。私はBookbeatストアで書籍を販売したすべての著者の書店で販売された書籍の名前と数を照会しています。私はこのクエリを実行するとテーブルの重複カラムの合計

SELECT DISTINCT au_lname, au_fname, qty 
from authors 
JOIN titleauthor on titleauthor.au_id = authors.au_id 
JOIN titles on titles.title_id = titleauthor.title_id 
JOIN sales on sales.title_id = titles.title_id 
JOIN stores on stores.stor_id = sales.stor_id 
--WHERE stor_name LIKE 'Bookbeat' 

私はこの結果を得る

Bennet Abraham 5 
Bennet Abraham 10 
Blotchet-Halls Reginald 20 
Carson Cheryl 30 
DeFrance Michel 15 
DeFrance Michel 25 
del Castillo Innes 10 
Dull Ann 50 
Green Marjorie 5 
Green Marjorie 10 
Green Marjorie 35 
Gringlesby Burt 20 
Hunter Sheryl 50 
Karsen Livia 20 
Locksley Charlene 25 
MacFeather Stearns 20 
MacFeather Stearns 25 
O'Leary Michael 20 
O'Leary Michael 25 
Panteley Sylvia 40 
Ringer Albert 3 
Ringer Albert 10 
Ringer Albert 20 
Ringer Albert 25 
Ringer Albert 75 
Ringer Anne 3 
Ringer Anne 10 
Ringer Anne 15 
Ringer Anne 20 
Ringer Anne 25 
Ringer Anne 75 
Straight Dean 15 
White Johnson 15 
Yokomoto Akiko 20 

しかし、私は、私が取得する場所

Bennet Abraham 10 
Carson Cheryl 30 
DeFrance Michel 15 
Green Marjorie 10 
MacFeather Stearns 25 
O'Leary Michael 25 
Ringer Anne 15 

私は私が探しています何を考えてこのコメントを解除する場合私は正しい答えを得るために重複を集計することです。 だから、ベネットアブラハムの実際の量は、15

答えて

2

だろうここでその作者を合計避ける一つの方法(著者名が一意で保証されていないとして、あなたは常にGROUP BYでPKを含める必要があります)

SELECT au_lname, 
     au_fname, 
     SUM(qty) AS qty 
FROM authors 
     JOIN titleauthor 
     ON titleauthor.au_id = authors.au_id 
     JOIN titles 
     ON titles.title_id = titleauthor.title_id 
     JOIN sales 
     ON sales.title_id = titles.title_id 
     JOIN stores 
     ON stores.stor_id = sales.stor_id 
GROUP BY authors.au_id, 
      au_lname, 
      au_fname 
HAVING MAX(CASE 
      WHEN stor_name = 'Bookbeat' THEN 1 
      END) = 1 

それとも別です資格はありませんが、結合は2回行われます。

;WITH CTE As 
(
SELECT  authors.au_id, 
      au_lname, 
      au_fname, 
      stor_name, 
      qty   
FROM authors 
     JOIN titleauthor 
     ON titleauthor.au_id = authors.au_id 
     JOIN titles 
     ON titles.title_id = titleauthor.title_id 
     JOIN sales 
     ON sales.title_id = titles.title_id 
     JOIN stores 
     ON stores.stor_id = sales.stor_id 
) 
SELECT au_lname, 
     au_fname, 
     SUM(qty) AS qty 
FROM CTE 
WHERE au_id IN (SELECT au_id FROM CTE WHERE stor_name = 'Bookbeat') 
GROUP BY au_id, 
      au_lname, 
      au_fname 
+0

ベストアプローチ - HAVING句およびBY句前GROUPに 'stor_name = 'Bookbeat''を挿入ドロップすることにより、第一文を変更します。 – dbenham

+1

@dbenham - 希望の結果を返しません。彼らは、すべての書籍(任意の店舗で販売されています)の数を求めていますが、Bookbeatストアで書籍を販売している著者の場合のみです。 –

+0

くそー、私はもっと慎重に読む必要があります。 – dbenham

関連する問題