テーブルに 2 つの列がfirst_name
ありlast_name
、たとえば、同じ名前を共有する人の数を調べたい場合:
Name Count | Name
-------------------------
12 | John Smith
8 | Bill Gates
4 | Steve Jobs
両方の列でグループ化 - 例:
select firstname, lastname, count(*) as `Name Count`
from table
group by firstname, lastname
名前にはさまざまな大文字の使用 (つまり、'John' と 'john') があり、データベースに余分なスペースがある可能性があるため、最初に名前と姓をクリーンアップして連結するサブクエリを使用し、次に and を使用COUNT
しGROUP BY
ます。
SELECT COUNT(*) AS `name_count`
FROM (
SELECT CONCAT(LOWER(TRIM(`first_name`)), ' ', LOWER(TRIM(`last_name`))) AS `full_name`
FROM `table`
) AS `table_with_concat_names`
GROUP BY `full_name`
ORDER BY `name_count` DESC;
LOWER(TRIM())
名前と姓の両方に応募したことがわかります。このように、「John Smith」と「john smith」を比較すると同一人物になるように、LOWER() ですべて小文字にします。また、TRIM() を使用して余分なスペースを削除したので、「John Smith」(後のスペース) )と「ジョン・スミス」も同一人物です。
group by 句を使用する
select (firstname + ' ' + lastname) as Name, count(*) as 'Name Count'
from table
group by (firstname + lastname)