2016-10-26 3 views
0

正直なところ、この問題にどのようにアプローチするのか分かりません。私はSELECT nameになってしまった。そして、私は迷っている(恥ずかしい)。SQL - 惑星上の人からの総認証数を取得する(別個の3つのテーブル)

問題:惑星によってグループ分けされた人々によって保有されている認証の数を見つける。これには最初の2つの列が必要です。「名前」は少なくとも1つの認証を持つ惑星の名前になります。 2番目の列は「CertCount」であり、リーが「Viper」と「Mechanic」で認定され、Karaが「Viper」で認定されていて、その両方がCaprica、その後、カプリカのための「CertCountは、」3次のようになります。

CREATE TABLE `bsg_cert` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `title` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB 

CREATE TABLE `bsg_cert_people` (
    `cid` int(11) NOT NULL DEFAULT '0', 
    `pid` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`cid`,`pid`), 
    KEY `pid` (`pid`), 
    CONSTRAINT `bsg_cert_people_ibfk_1` FOREIGN KEY (`cid`) REFERENCES `bsg_cert` (`id`), 
    CONSTRAINT `bsg_cert_people_ibfk_2` FOREIGN KEY (`pid`) REFERENCES `bsg_people` (`id`) 
) ENGINE=InnoDB 

CREATE TABLE `bsg_people` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `fname` varchar(255) NOT NULL, 
    `lname` varchar(255) DEFAULT NULL, 
    `homeworld` int(11) DEFAULT NULL, 
    `age` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `homeworld` (`homeworld`), 
    CONSTRAINT `bsg_people_ibfk_1` FOREIGN KEY (`homeworld`) REFERENCES `bsg_planets` (`id`) ON DELETE SET NULL ON UPDATE CASCADE 
) ENGINE=InnoDB 

CREATE TABLE `bsg_planets` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) NOT NULL, 
    `population` bigint(20) DEFAULT NULL, 
    `language` varchar(255) DEFAULT NULL, 
    `capital` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `name` (`name`) 
) ENGINE=InnoDB 

答えて

1

は、トリックを行う必要がありますして、グループでのカウントをやってそれらすべてを参加:

SELECT planet.name , 
    COUNT(*) AS cert_count 
FROM bsg_cert_people people_cert 
    JOIN bsg_people people ON people.id = people_cert.pid 
    JOIN bsg_planet planet ON people.homeworld = planet.id 
GROUP BY planet.name 
0
SELECT pl.name, count(cert) AS "CertCount" 
FROM bsg_planets pl 
JOIN bsg_people pe ON pl.id = pe.homeworld 
JOIN bsg_cert_people cp ON cp.pid = pe.id 
GROUP BY pl.id 

私はこれがそれだと思います。

関連する問題