![](/img/trans.png)
[英]SQL query based on condition of null date and a specific value for another field
[英]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
結果:
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.