クラスの割り当てを行っていますが、1つの質問で問題が発生しているようです。この質問では、2つの結合3テーブルを使用し、各行の全体的な発生数をカウントする必要があります。
これは私がこれまでに持っている結合コマンドです(ネストされたカウント(個別)をどこに置くことができるかを理解する必要があります:
SELECT litwork.btitle,
bookcopy.copy_num,
request.rdate
FROM litwork,
bookcopy,
request
WHERE litwork.lit_id = bookcopy.lit_id
AND bookcopy.persidh = request.persid
ORDER BY btitle;
結合により、結果としてこのテーブルが得られます。
BTITLE COPY_NUM RDATE
--------------- -------------- -------
Bankers 2 18-oct-2012
Bankers 2 30-oct-2012
Blue Ridge 1 20-oct-2012
Linux 1 18-oct-2012
Linux 1 30-oct-2012
My Life 3 31-oct-2012
O-O Design 1 30-oct-2012
O-O Design 3 25-oct-2012
O-O Design 3 18-oct-2012
では、その1つのコマンド内の3つの列すべてをカウント(個別)するにはどうすればよいでしょうか。標準のSQLを使用しています
編集して質問プロンプトを追加します(コピーして貼り付けます):
リクエストされた本ごとに、リクエストの数とコピーの数を表示します。タイトル、リクエスト数、本の部数を表示します。タイトル順に表示します。この質問のSQLクエリは、結合とカウントを組み合わせたものです。このようなクエリを理解するには、カウント関数の前に結合を処理する必要があることに注意してください。
また、結合によって重複データが作成される可能性があるため、必要に応じてcount(distinct ..)形式のcountを使用する必要があることにも注意してください。(提案:この質問で問題が発生した場合は、カウントとグループなしで結合の結果を確認し、これらの結果が既存のテーブルのデータである場合に必要なカウントを実行する方法を見つけてください。この余分なクエリは表示しないでください。あなたのレポートで。)。
仮定:特定の顧客が同じ本のリクエストを複数持つことはできません。テーブルREQUESTをテーブルBOOK_COPYと結合する場合、特定の本が表示される行数は、その本のリクエスト数の積であることに注意してください。とコピー数の。
更新:それはまだ100%正しくありません。
結合に使用される追加のテーブル(最初のテーブルはLITWORKテーブル、2番目のテーブルはREQUESTテーブル、最後のテーブルはBOOKCOPYテーブルです)
LIT_ID BTITLE YEAR
---------- --------------- ----------
1001 The Trojans 2000
1002 My Life 2001
1003 Nature 1998
1004 Blue Ridge 1996
1005 True Java 2012
1006 CPlus 2004
1007 Streaming 2000
1008 MyApps 1998
1009 O-O Design 2012
1010 Camping 1978
1011 Bankers 1970
1012 Linux 1962
LIT_ID PERSID BNAME RDATE RTIME
---------- ---------- -------- ----------- ----------
1001 11 College 18-oct-2012
1001 7 College 25-oct-2012
1003 8 La Jolla 20-oct-2012
1005 7 Pacific 18-oct-2012
1008 11 Atlantic 30-oct-2012
1008 1 College 30-oct-2012
1012 4 La Jolla 31-oct-2012
LIT_ID COPY_NUM PERSID_OUT DATE_OUT DATE_DUE PERSIDH HDATE BNAMEP BNAMEC
---------- ---------- ---------- ----------- ----------- ---------- ----------- -------- --------
1001 1 4 13-sep-2012 27-nov-2012 La Jolla
1002 1 Pacific Atlantic
1002 2 1 02-sep-2012 12-oct-2012 Pacific
1002 3 4 15-nov-2012 La Jolla La Jolla
1003 1 9 10-dec-2012 30-dec-2012 Pacific
1003 2 1 13-dec-2012 22-jan-2013 La Jolla
1003 3 Atlantic Atlantic
1004 1 8 19-nov-2012 Pacific College
1004 2 4 04-dec-2012 17-feb-2013 Pacific
1004 3 10 11-oct-2012 31-oct-2012 Atlantic
1005 1 4 27-oct-2012 10-jan-2013 La Jolla
1005 2 1 19-sep-2012 29-oct-2012 Pacific
1006 1 7 29-jan-2012 09-mar-2012 Pacific
1006 2 1 07-jan-2012 16-feb-2012 College
1006 3 Pacific College
1007 1 1 26-oct-2012 05-dec-2012 Pacific
1007 2 Pacific College
1007 3 6 15-oct-2012 04-nov-2012 La Jolla
1008 1 4 23-oct-2012 06-jan-2013 College
1008 2 3 15-oct-2012 24-nov-2012 Pacific
1009 1 1 20-nov-2012 Pacific Pacific
1009 2 11 28-sep-2012 12-dec-2012 Pacific
1009 3 7 22-nov-2012 La Jolla College
1010 1 1 01-sep-2012 11-oct-2012 Pacific
1011 1 4 31-jan-2012 15-apr-2012 La Jolla
1011 2 11 20-nov-2012 College La Jolla
1012 1 11 19-nov-2012 Pacific Atlantic
1012 2 3 29-oct-2012 08-dec-2012 Pacific
これは私の現在のSQLコマンドです(Gordon Linoffのコメントから得たものではありません-それは私に2〜3行余分に与えました)
select litwork.btitle,
count(distinct bookcopy.copy_num),
count(distinct request.rdate)
from litwork,
bookcopy,
request
where litwork.lit_id=request.lit_id and
bookcopy.persidh=request.persid
group by btitle;
そして、それは私にこのテーブルを与えます(あなたは私が[あなたが重複を取り出すとき]すべての正しい量の行を持っているのを見ることができますが、カウント数は間違っています)
BTITLE COUNT(DISTINCTBOOKCOPY.COPY_NUM) COUNT(DISTINCTREQUEST.RDATE)
--------------- -------------------------------- ----------------------------
Linux 1 1
MyApps 2 1
Nature 1 1
The Trojans 3 2
True Java 1 1