0

テーブルに 2 つの列がfirst_nameありlast_name、たとえば、同じ名前を共有する人の数を調べたい場合:

Name Count | Name
-------------------------
 12        | John Smith
  8        | Bill Gates
  4        | Steve Jobs
4

3 に答える 3

3

両方の列でグループ化 - 例:

select firstname, lastname, count(*) as `Name Count`
from table
group by firstname, lastname
于 2012-12-13T14:53:57.387 に答える
1

名前にはさまざまな大文字の使用 (つまり、'John' と 'john') があり、データベースに余分なスペースがある可能性があるため、最初に名前と姓をクリーンアップして連結するサブクエリを使用し、次に and を使用COUNTGROUP 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」(後のスペース) )と「ジョン・スミス」も同一人物です。

于 2012-12-13T14:55:06.297 に答える
0

group by 句を使用する

select (firstname + ' ' + lastname) as Name, count(*) as 'Name Count'
from table
group by (firstname + lastname)
于 2012-12-13T14:51:19.990 に答える