通过返回不同的集合进行计数和分组-中途解决了:/

时间:2018-06-26 18:12:53

标签: sql sql-server

有人可以帮忙吗?我的麻烦是人们可能具有相同的ID或不同的名称拼写。如果按ID分组(不是主键),则行数与按ID和名称分组的行数不同。在选择中仍然具有ID和名称的同时,如何按ID分组?

Create Table Client(ID Int, Name Varchar(15))
Insert Into Client VALUES(11,'Batman'),(22,'Batman'),(33,'Robin'),(44,'Joker'),(44,'The Joker'),(33,'Robin')

Select Count(ID) From Client
Select * From Client

-这将返回4行

Select Count (ID)
From Client
Group By ID

-返回5行,因为Joker和The Joker具有不同的名称,但具有相同的ID。我想按ID而不是名称来计数,因为有很多错别字。

Select Count (ID), [Name] , ID  
From Client
Group By ID, [Name]

我该如何执行并使其起作用?

Select Count (ID), [Name] , ID  
From Client
Group By ID   --<< Always throws and error unless I include Name, which 
--returns too many rows. 

它应该返回

Count   Name    ID
1       Batman  11
1       Batman  22
2       Joker   44   --<< Correct
2       Robin   33

And not
    Count   Name        ID
    1       Batman      11
    1       Batman      22
    2       Robin       33    
    1       Joker       44  --Wrong
    1       The Joker   44  --Wrong

1 个答案:

答案 0 :(得分:0)

使用select count(*) from ClientLog将准确告诉您表中有多少条记录。如果您的ID字段是主键,那么select count(ID) from ClientLog应该返回相同的数字。

您的第一个查询有点令人困惑,因为您是按ID分组而不显示ID。因此,您可能会为每条记录获得一行,其中行值为1。

您的第二个查询也有点混乱,因为没有聚合发生(因为您的ID字段是唯一的)。

您要在查询中具体获取什么(如果除了表中有多少条记录之外,还有什么其他内容)?