如何汇总国家/地区计数以显示每个大洲的数字

时间:2019-04-09 11:25:24

标签: php mysql

我正在开发一个PHP应用程序以显示注册人统计信息,并且我有一个MySQL表,该表已经充满了注册人数据。列是“名称”,“组织”和“国家/地区” (没有“大陆”列)

如何显示每个大陆的注册人数?

1 个答案:

答案 0 :(得分:0)

首先,我建议您对表格结构进行规范化,为了进行规范化,您必须需要一个包含与国家/地区有关的所有信息的国家/地区表(continent)。

对此进行探索: https://gist.github.com/nobuti/3816985,您将找到一个国家/地区表。

示例解决方案:

在您的结构中,您必须在这里需要2个表,一个表用于continents,第二个表是countries

架构:

CREATE TABLE IF NOT EXISTS `continents` (
  `code` CHAR(2) NOT NULL COMMENT 'Continent code',
  `name` VARCHAR(255),
  PRIMARY KEY (`code`)
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS `countries` (
  `code` CHAR(2) NOT NULL COMMENT 'Two-letter country code (ISO 3166-1 alpha-2)',
  `name` VARCHAR(255) NOT NULL COMMENT 'English country name',
  `full_name` VARCHAR(255) NOT NULL COMMENT 'Full English country name',
  `iso3` CHAR(3) NOT NULL COMMENT 'Three-letter country code (ISO 3166-1 alpha-3)',
  `number` SMALLINT(3) ZEROFILL NOT NULL COMMENT 'Three-digit country number (ISO 3166-1 numeric)',
  `continent_code` CHAR(2) NOT NULL,
  PRIMARY KEY (`code`),
  KEY `continent_code` (`continent_code`),
  CONSTRAINT `fk_countries_continents` FOREIGN KEY (`continent_code`) REFERENCES `continents` (`code`)
) ENGINE=InnoDB;

侧面说明::从https://gist.github.com/nobuti/3816985

获取INSERT查询

此后,您可以使用INNER JOIN解决问题,例如:

SELECT COUNT(*) as Total, co.name 
FROM registrants rg
INNER JOIN countries cc ON cc.name = rg.country
INNER JOIN continents co ON co.code = cc.continent_code
GROUP BY co.name 

现在,您可以获得带有洲名的注册人GROUP数量。