2016-07-03 3 views
0

複数の列で重複しないエントリを選択する必要があります(Last_name、First_Name)。 SELECTの一部としてCOUNT(First_Name)を使用して、結果のエントリ数を確認します。駆動テーブルの列値を追加する

SELECT Last_Name, First_Name, COUNT(First_Name) 
FROM table_of_people_and_their_data 
GROUP BY LAST_Name HAVING COUNT(First_Name) = 1; 

- すべての個別のエントリとそのエントリの数をチェックとして与えます。

SELECT Last_Name, First_Name, COUNT(First_Name) 
FROM table_of_people_and_their_data 
GROUP BY LAST_Name HAVING COUNT(First_Name) > 1; 

- すべてのエントリに重複があり、重複が数えられます。

すべてが同じ表のものです。

table_of_people_and_their_dataには多くの列があります。姓と名によるソートのみ。

ここでcount(table_of_people_and_the_data)は957個の行を生成します。
                                                                     最初のクエリ= 1のカウントは120行を生成します。 2番目のクエリの
                                                          カウント> 1は、359行を生成します。
                                                                   これらのクエリの                                合計は479行です。                120 + 359 = 479

                            Iが重複する行との結果が837行数を有していると仮定する。 957から120 = 837

Iが与えられたクエリは3つの列、LAST_NAME、FIRST_NAME、COUNT(FIRST_NAME)

何か等を読み出し、テーブル生成:

 Last_Name | First_Name | Count 
      Jack  Frost  3 
     Sally  Soft   4 

などをに。 Count列を追加すると、Count列の結果がすべて837になるため、以前のクエリを証明できます。

これを1つのクエリでどのように実現できますか。上記の使用クエリは次のように変更されました:

SELECT Last_Name, First_Name, SUM(mycount) 
FROM COUNT(First_Name) mycount FROM table_of_people_and_their_data 
GROUP BY LAST_Name HAVING COUNT(First_Name) > 1; 

エイリアスとドライブドテーブルを使用すると多くのバリエーションを試しました。ほとんどのエラーが戻ってきました。エラー1248(42000):すべての派生テーブルには別のエイリアスが必要です

ありがとうございました。

+0

は私たちにサンプル入力と出力を表示します。 –

答えて

0

このような何か: -

Select srce,first_name,last_name,Obs,CumulativeTotal 
from 
(
select srce,first_name,last_name,Obs,rn,@rt:[email protected]+Obs as CumulativeTotal 
from 
(
SELECT 1 as srce,FIRST_NAME,LAST_NAME,COUNT(*) as Obs, @rn:[email protected] + 1 as rn 
FROM  TBL_BORROWERS , (select @rn:=0) rb 
group by first_name, last_name having (count(*) = 1) 
) s 
,(select @rt:=0) rt 
) t 

union all 
select srce,'Unique Csutomers', '' ,count(distinct first_name,last_name),count(distinct first_name,last_name) 
from 
(
select 2 as srce,first_name,last_name,Obs,rn,@rt:[email protected]+Obs as CumulativeTotal 
from 
(
SELECT 1 as srce,FIRST_NAME,LAST_NAME,COUNT(*) as Obs, @rn:[email protected] + 1 as rn 
FROM  TBL_BORROWERS , (select @rn:=0) rb 
group by first_name, last_name having (count(*) = 1) 
) s 
,(select @rt:=0) rt 
) t 

union all 
Select srce,first_name,last_name,Obs,CumulativeTotal 
from 
(
select srce,first_name,last_name,Obs,rn,@rt1:[email protected]+Obs as CumulativeTotal 
from 
(
SELECT 3 as srce,FIRST_NAME,LAST_NAME,COUNT(*) as Obs, @rn1:[email protected] + 1 as rn 
FROM  TBL_BORROWERS , (select @rn1:=0) rn 
group by first_name, last_name having (count(*) > 1) 
) s 
,(select @rt1:=0) rt1 

) t 

union all 
select srce,'Duplicate Customers', '' ,count(distinct first_name,last_name),count(distinct first_name,last_name) 
from 
(
select 4 as srce,first_name,last_name,Obs,rn,@rt:[email protected]+Obs as CumulativeTotal 
from 
(
SELECT 1 as srce,FIRST_NAME,LAST_NAME,COUNT(*) as Obs, @rn:[email protected] + 1 as rn 
FROM  TBL_BORROWERS , (select @rn:=0) rb 
group by first_name, last_name having (count(*) > 1) 
) s 
,(select @rt:=0) rt 
) t 


UNION  
SELECT 9 as srce,'Distinct Customers' as first_name,'' as last_name, 
      COUNT(DISTINCT FIRST_NAME,LAST_NAME), 
      COUNT(DISTINCT FIRST_NAME,LAST_NAME) 
FROM  TBL_BORROWERS 
UNION  
SELECT 10 as srce,'Total Rows' as first_name,'' as last_name, 
      COUNT(*), 
      COUNT(*) 
FROM  TBL_BORROWERS 
関連する問題