添加已驱动表

时间:2016-07-03 04:02:55

标签: mysql

我需要选择多列没有重复的条目,Last_name,First_Name。我使用COUNT(First_Name)作为SELECT的一部分来验证结果的数量。

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_their_data)产生957行                   第一个查询的计数= 1产生120行                  第二次查询的次数> 1产生359行                                这些查询的总数是479行。 120 + 359 = 479

     

我假设重复行的结果有837行计数。 957 - 120 = 837

我给出的查询产生一个表,该表读取三列,Last_Name,First_Name,COUNT(First_Name)

类似的东西:

        Last_Name | First_Name | Count
          Jack        Frost        3
         Sally        Soft         4

等等。我想如果我添加Count列,我可以证明以前的查询,因为累计的Count列的所有结果都应该是837.

如何在一个查询中实现此目的;使用上面给出的查询修改了类似:

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;

我尝试过使用别名和驱动表的许多变体。我的大多数错误都回来了ERROR 1248(42000):每个派生表必须有自己的别名

谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

这样的事情: -

Select   srce,first_name,last_name,Obs,CumulativeTotal
from
(
select   srce,first_name,last_name,Obs,rn,@rt:=@rt+Obs as CumulativeTotal
from
(
SELECT  1 as srce,FIRST_NAME,LAST_NAME,COUNT(*) as Obs, @rn:=@rn + 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:=@rt+Obs as CumulativeTotal
from
(
SELECT  1 as srce,FIRST_NAME,LAST_NAME,COUNT(*) as Obs, @rn:=@rn + 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:=@rt1+Obs as CumulativeTotal
from
(
SELECT  3 as srce,FIRST_NAME,LAST_NAME,COUNT(*) as Obs, @rn1:=@rn1 + 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:=@rt+Obs as CumulativeTotal
from
(
SELECT  1 as srce,FIRST_NAME,LAST_NAME,COUNT(*) as Obs, @rn:=@rn + 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