我们说我在桌子上有两个字段。为了讨论的目的,让我们说这些字段是名字和姓氏。我想知道名字出现在同一姓氏旁边的名字多少次。假设姓氏列是唯一的,我如何计算每个姓氏每个名字的存在次数?
即。让我们说我有一张包含以下数据的表格:
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)
值得注意的是,第二个字段可能会重复,因此计算列中的唯一实例是没有用的。它仅对第一个字段有用。
感谢。
答案 0 :(得分:1)
您可以在SELECT
语句中使用相关的子查询,然后将其全部包装在concat函数中以获取所需的内联结果
SELECT DISTINCT
CONCAT(LastName, ': ', FirstName, '(', (SELECT COUNT(FirstName) FROM Person WHERE FirstName = p.FirstName AND LastName = p.LastName),')')
FROM Person p
答案 1 :(得分:0)
我的解决方案:
select name,surname, count(surname) over (partition by name) as cnt
from your_table
答案 2 :(得分:0)
你可以使用它。
SELECT CONCAT( Name,':', GROUP_CONCAT(CONCAT( LastName, ' (', CNT , ')' ), ' ') )
FROM (
SELECT Name, LastName, COUNT(*) CNT FROM MyTable
GROUP BY
Name, LastName
) T
GROUP BY Name
结果:
Black:Jane (1) ,John (1) ,Samantha (1) ,Jack (2)
Smith:David (1) ,Jane (1) ,John (3)
答案 3 :(得分:0)
简单聚合?
select last_name, first_name, count(*)
from myTable
group by last_name, first_name
order by last_name, first_name
在中显示它,John,3,David,1,Jane,1 格式可能会失败,因为史密斯太多了不同的姓氏。