仅计算重复记录的行数
Counting only number of rows a record being repeated
这就是我面临的问题-
我有一个 table "A" 如下
Name AmountPaid Type
NAME1 5 1
NAME1 10 1
NAME1 3 1
NAME2 5 2
NAME2 9 2
NAME2 8 2
这里我们有两个名称 - Name1 和 Name2,类型为 1 和 2
我正在尝试获取一个查询,该查询应该 return 只有数字,该数字应该显示 table 中存在的唯一名称集合的次数。
在上面,我期望结果为 - 2
我试过查询
Select NAME, count(Name) from A group by Name
但是这将 return 低于 2 条记录。
NAME1 3
NAME2 3
非常感谢任何帮助。
您可以使用 DISTINCT 来执行此操作:
SELECT COUNT (DISTINCT NAME)
FROM A
请尝试以下查询:
Select count(distinct(NAME)) from A
如果我没记错的话,这就是您所需要的。考虑到您不想 count
name
如果它不重复
SELECT Count(DISTINCT NAME)
FROM (SELECT *,
Row_number()OVER(partition BY NAME ORDER BY type) rn
FROM Yourtable) a
WHERE rn > 1
使用这个:
--TEST TABLE
Declare @sometable as table (Name Varchar(10))
insert into @sometable
values ('Name1'),
('Name1'),
('Name1'),
('Name2'),
('Name2'),
('Name2'),
('Name3'),
('Name4')
--VARIANT 1
SELECT COUNT(*)
FROM (
SELECT NAME,
COUNT(*) AS Cnt
FROM @sometable
GROUP BY NAME
) AS T
WHERE Cnt > 1
--VARIANT 2
SELECT COUNT(*)
FROM ( SELECT NAME
FROM @sometable
GROUP BY NAME
HAVING COUNT(*) > 1 ) AS T
--VARIANT 3
SELECT COUNT(*)
FROM (SELECT DISTINCT NAME, COUNT(*) OVER (PARTITION BY NAME) AS Cnt
FROM @sometable
) AS T
WHERE Cnt > 1
这就是我面临的问题- 我有一个 table "A" 如下
Name AmountPaid Type
NAME1 5 1
NAME1 10 1
NAME1 3 1
NAME2 5 2
NAME2 9 2
NAME2 8 2
这里我们有两个名称 - Name1 和 Name2,类型为 1 和 2
我正在尝试获取一个查询,该查询应该 return 只有数字,该数字应该显示 table 中存在的唯一名称集合的次数。 在上面,我期望结果为 - 2 我试过查询
Select NAME, count(Name) from A group by Name
但是这将 return 低于 2 条记录。
NAME1 3
NAME2 3
非常感谢任何帮助。
您可以使用 DISTINCT 来执行此操作:
SELECT COUNT (DISTINCT NAME)
FROM A
请尝试以下查询:
Select count(distinct(NAME)) from A
如果我没记错的话,这就是您所需要的。考虑到您不想 count
name
如果它不重复
SELECT Count(DISTINCT NAME)
FROM (SELECT *,
Row_number()OVER(partition BY NAME ORDER BY type) rn
FROM Yourtable) a
WHERE rn > 1
使用这个:
--TEST TABLE
Declare @sometable as table (Name Varchar(10))
insert into @sometable
values ('Name1'),
('Name1'),
('Name1'),
('Name2'),
('Name2'),
('Name2'),
('Name3'),
('Name4')
--VARIANT 1
SELECT COUNT(*)
FROM (
SELECT NAME,
COUNT(*) AS Cnt
FROM @sometable
GROUP BY NAME
) AS T
WHERE Cnt > 1
--VARIANT 2
SELECT COUNT(*)
FROM ( SELECT NAME
FROM @sometable
GROUP BY NAME
HAVING COUNT(*) > 1 ) AS T
--VARIANT 3
SELECT COUNT(*)
FROM (SELECT DISTINCT NAME, COUNT(*) OVER (PARTITION BY NAME) AS Cnt
FROM @sometable
) AS T
WHERE Cnt > 1