2017-01-02 5 views
1

このテーブルには、orgin、出生、市民権、性別に関するデータを持つ人が含まれています。ジョインとグループのカウントフィールドはテーブルになります

PEOPLE 
+-----------------------+--------------+------+-----+---------+----------------+ 
| Field     | Type   | Null | Key | Default | Extra   | 
+-----------------------+--------------+------+-----+---------+----------------+ 
| id     | int(11)  | NO | PRI | NULL | auto_increment | 
| name     | varchar(200) | YES |  | NULL |    | 
| surname    | varchar(200) | YES |  | NULL |    | 
| sex     | varchar(1) | YES |  | NULL |    | 
| idNatBirth   | int(11)  | YES | MUL | NULL |    | 
| idNatOrigin   | int(11)  | YES | MUL | NULL |    | 
| idNatCitizen   | int(11)  | YES | MUL | NULL |    | 
+-----------------------+--------------+------+-----+---------+----------------+ 

国連IDS(出産、起源、市民権は)国民のテーブルに結合されている:私はまだ国が人を数える3つのテーブルを得てきました

NATIONS 
+-------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| code  | bigint(20) | YES |  | NULL |    | 
| description | varchar(100) | YES |  | NULL |    | 
+-------------+--------------+------+-----+---------+----------------+ 

。 3つの国のフィールドは同じモデルです。これは誕生のためのものです:

select people.idNatBirth, nations.*, count(*) FROM people 
INNER JOIN nations 
ON nations.id = people.idNatBirth 
GROUP BY nations.description; 

+------------------+-----+--------+-------------+----------+ 
| idNatBirth  | id | code | description | count(*) | 
+------------------+-----+--------+-------------+----------+ 
|    133 | 133 |  1 | AFGHANISTAN |  43 | 
|    193 | 193 |  61 | IRAQ  |  139 | 
|    219 | 219 |  87 | PAKISTAN |  59 | 
|    238 | 238 | 106 | SIRIA  |  161 | 
+------------------+-----+--------+-------------+----------+ 

しかし、私は出生、起源、市民権と性別分布をそれぞれのカウントのために示すより複雑な結果が必要です。そのような 何か:

+------------------------+----------+------------+----------+------------+------------+-----------+------------+ 
| description   | birth | birthMale | birthFem | origin  | originMale | originFem | citizenship etc .....  
+------------------------+----------+------------+----------+------------+------------+-----------+------------+ 
| AFGHANISTAN   |  43 |   20 |  23 |   40 |   20 |  20 | .... 
| IRAQ     |  139 |   39 |  100 |   29 |   9 |  20 | .... 
| PAKISTAN    |  59 |   50 |  9 |   10 |   9 |   1 | .... 
| SIRIA     |  161 |   61 |  100 |  102 |   2 |  100 | .... 
| ALBANIA    |  0 |   0 |  0 |   12 |   10 |   2 | .... 
| SOMALIA    |  0 |   0 |  0 |  ... 
... 
... 

あなたはすべての国家が人々のテーブルのすべての分野に存在していない見ることができるように... それを達成する方法上の任意のアイデア? ありがとうございます。 これは、人々のテーブルのサンプルデータです:

+----+------------+------------+-------+------------------+----------------------+-----------------------+ 
| id | name  | surname | sex | idNatBirth  | idNatOrigin   | idNatCitizen   | 
+----+------------+------------+-------+------------------+----------------------+-----------------------+ 
| 1 | name  | surname | M  |    133 |     NULL |     NULL | 
| 2 | AUTOS1  | AUTOS2  | M  |    133 |     NULL |     NULL | 
| 3 | Johari  | JAI  | F  |    193 |     238 |     193 | 
| 4 | Bejide  | RAI  | F  |    193 |     193 |     193 | 
| 5 | Sema  | DARSHA  | M  |    238 |     238 |     238 | 
| 6 | Kefilwe | LATA  | M  |    219 |     219 |     219 | 
| 7 | Kali  | RAJAN  | M  |    238 |     238 |     238 | 
| 8 | Tanginika | SAXENA  | F  |    193 |     193 |     193 | 
| 9 | Marahaba | CHAUHAN | M  |    238 |     238 |     238 | 
| 10 | Malkia  | PATEL  | M  |    238 |     238 |     238 | 
| 11 | Makena  | DHAWAN  | F  |    193 |     193 |     193 | 
| 12 | Dziko  | NARAYAN | M  |    238 |     238 |     238 | 
| 13 | Anaya  | NEEL  | M  |    193 |     193 |     193 | 
| 14 | Yahminah | SANDEEP | M  |    238 |     238 |     238 | 
| 15 | Iruwa  | SEN  | M  |    219 |     219 |     219 | 
| 16 | Abena  | MATI  | M  |    133 |     133 |     133 | 
| 17 | Obax  | BHATT  | M  |    193 |     193 |     193 | 
| 18 | Bikilu  | NATH  | F  |    133 |     133 |     133 | 
| 19 | Mumbi  | SRINI  | M  |    219 |     219 |     219 | 
| 20 | Wanjiko | MANJU  | M  |    193 |     238 |     193 | 
+----+------------+------------+-------+------------------+----------------------+-----------------------+ 
+0

'people'テーブルからいくつかのサンプルデータを提供できますか? – Viki888

+0

ありがとう! 投稿を編集しました... –

答えて

0

あなたは、これはあなたを助けるでしょう

SELECT description, 
     SUM(birth)  birth, 
     SUM(birthmale) birthMale, 
     SUM(birthfem) birthFem, 
     SUM(origin)  origin, 
     SUM(originmale) originMale, 
     SUM(originfem) originFem, 
     SUM(citizenship) citizenship, 
     SUM(citizenmale) citizenMale, 
     SUM(citizenfem) citizenFem 
FROM (SELECT CASE 
       WHEN n.id IS NOT NULL THEN n.description 
       WHEN org.id IS NOT NULL THEN org.description 
       WHEN cit.id IS NOT NULL THEN cit.description 
       END  description, 
       SUM(CASE WHEN n.id IS NOT NULL THEN 1 ELSE 0 END) AS birth, 
       SUM(CASE WHEN n.id IS NOT NULL AND people.sex = 'M' THEN 1 ELSE 0 END) birthmale, 
       SUM(CASE WHEN n.id IS NOT NULL AND people.sex = 'F' THEN 1 ELSE 0 END) birthFem, 
       SUM(CASE WHEN org.id IS NOT NULL THEN 1 ELSE 0 END) AS origin, 
       SUM(CASE WHEN org.id IS NOT NULL AND people.sex = 'M' THEN 1 ELSE 0 END) originmale, 
       SUM(CASE WHEN org.id IS NOT NULL AND people.sex = 'F' THEN 1 ELSE 0 END) originFem, 
       SUM(CASE WHEN cit.id IS NOT NULL THEN 1 ELSE 0 END) AS citizenship, 
       SUM(CASE WHEN cit.id IS NOT NULL AND people.sex = 'M' THEN 1 ELSE 0 END) citizenmale, 
       SUM(CASE WHEN cit.id IS NOT NULL AND people.sex = 'F' THEN 1 ELSE 0 END) citizenFem 
     FROM people 
       LEFT JOIN nations n 
        ON n.id = people.idnatbirth 
       LEFT JOIN nations org 
        ON org.id = people.idnatorigin 
       LEFT JOIN nations cit 
        ON cit.id = people.idnatcitizen 
     GROUP BY n.id, 
       org.id, 
       cit.id, 
       n.description, 
       org.description, 
       cit.description)t1 
GROUP BY description; 

下記の希望を試すことができます。これは本当に簡単なクエリです。クエリをフォーマットすると、それは悪魔のようなものでした。

+0

ほぼあります!ありがとう! 唯一の問題は、結果がすべてのフィールドに国の懸念があることです。 –

+0

ほぼそこに!ありがとう! 問題は、クエリが実際にすべてのフィールドに表示されている国のみを一覧表示することです:市民フィールドに表示されている国を見ることはできません... 3つのいずれかに関連するすべての国を表示する必要がありますフィールド... –

+0

@ Miss-Takeそのシナリオのサンプルデータはありますか?もしそうなら親切に質問を更新し、私に教えてください。 – Viki888

関連する問題