簡體   English   中英

SQL查詢以獲取一個字段重復另一個特定字段的次數

[英]SQL query to get number of times a field repeats for another specific field

假設我在一個表中有兩個字段。 出於討論目的,我們假設這些字段是名字和姓氏。 我想知道名字出現在同一個姓氏旁邊列出的次數。 假設“姓氏”列是唯一的,我如何確定每個姓氏存在多少次?

也就是說,假設我有一個包含以下數據的表:

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)

重要的是要注意,第二個字段可能會重復,因此對列中的唯一實例進行計數沒有用。 僅在參考第一個字段時有用。

謝謝。

您可以在SELECT語句中使用相關的子查詢,然后將其全部包裝在concat函數中以獲取所需的內聯結果

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

我的解決方案:

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

您可以使用它。

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) 

簡單聚合?

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

Smith,John,3,David,1,Jane,1格式顯示它可能會失敗,因為存在太多Smith和太多不同姓氏的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM