sql查询一个字段对另一个特定字段的重复次数

bttbmeg0  于 2021-06-23  发布在  Mysql
关注(0)|答案(4)|浏览(413)

假设一个表中有两个字段。为了便于讨论,我们假设字段是first name和last name。我想知道有多少次名字出现在同一个姓的旁边。假设“姓氏”列是唯一的,如何计算每个姓氏的每个名字存在多少次?
i、 e.假设我有一个包含以下数据的表:

Smith, John
Smith, David
Smith, Jane
Smith, John
Smith, John
Black, John
Black, Jane
Black, Jack
Black, Samantha
Black, Jack

我想要一个结果,告诉我史密斯有3个约翰,1个大卫和1个简,布莱克有2个杰克,1个简和1个萨曼莎。
不确定如何最好地格式化输出。也许只是:

Smith, John, 3, David, 1, Jane, 1
Black, Jack, 2, Jane, 1, Samantha, 1

可以让我轻松输出以下内容:

Smith: John (3), David (1), Jane (1)
Black: Jack (2), Jane (1), Samantha (1)

需要注意的是,第二个字段可能会重复,因此计算列中的唯一示例是没有用的。它只对第一个字段有用。
谢谢。

bqf10yzr

bqf10yzr1#

你可以用这个。

SELECT CONCAT( Name,':', GROUP_CONCAT(CONCAT( LastName, ' (', CNT , ')' ), ' ') ) 
FROM (
  SELECT Name, LastName, COUNT(*) CNT FROM MyTable
  GROUP BY 
  Name, LastName
 ) T 
 GROUP BY Name

sql小提琴
结果:

Black:Jane (1) ,John (1) ,Samantha (1) ,Jack (2)
Smith:David (1) ,Jane (1) ,John (3)
41zrol4v

41zrol4v2#

您可以在数据库中使用相关子查询 SELECT 语句,然后将其全部 Package 在concat函数中以获得所需的内联结果

SELECT  DISTINCT
        CONCAT(LastName, ': ', FirstName, '(', (SELECT COUNT(FirstName) FROM Person WHERE FirstName = p.FirstName AND LastName = p.LastName),')')
FROM    Person p
irtuqstp

irtuqstp3#

简单聚合?

select last_name, first_name, count(*)
from myTable
group by last_name, first_name
order by  last_name, first_name

以史密斯,约翰,3,大卫,1,简,1格式显示可能会失败,因为有太多的史密斯有太多不同的姓氏。

csbfibhn

csbfibhn4#

我的解决方案:

select name,surname, count(surname) over (partition by name) as cnt
from your_table

相关问题