CREATE TABLE `postcodes` ( `UID` int(11) NOT NULL auto_increment, `outward` char(4) NOT NULL, `inward` char(4) NOT NULL, `easting` mediumint(7) NOT NULL, `northing` mediumint(7) NOT NULL, `lat` decimal(11,6) NOT NULL, `long` decimal(11,6) NOT NULL, `NGR` char(9) NOT NULL, `grid` enum('osgb','osie') NOT NULL, PRIMARY KEY (`UID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=27602 ; CREATE TABLE `outbound_stats` ( `lat_avg` decimal(20,10) NOT NULL, `long_avg` decimal(20,10) NOT NULL, `lat_stddev` decimal(20,10) NOT NULL, `long_stddev` decimal(20,10) NOT NULL, `number` mediumint(8) unsigned NOT NULL, `outward` char(4) NOT NULL, PRIMARY KEY (`outward`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `outbound_stats` SELECT AVG(`lat`) `AS lat_avg`, AVG(`long`) `AS long_avg`, STDDEV(`lat`) AS lat_stddev, STDDEV(`long`) AS long_stddev, COUNT(*) AS `Number`,`outward` FROM `postcodes` GROUP BY `outward` SELECT `postcodes`.`outward`, `postcodes`.`inward`, `postcodes`.`lat`, `postcodes`.`long`,`outbound_stats`.*, abs(`postcodes`.`lat`-`outbound_stats`.`lat_avg`) AS `lat_offset`, abs(`postcodes`.`long`-`outbound_stats`.`long_avg`) AS `long_offset` FROM `postcodes` LEFT JOIN `outbound_stats` ON `postcodes`.`outward` = `outbound_stats`.`outward` WHERE `outbound_stats`.`number` >= 10 AND ( (abs(`postcodes`.`lat`-`outbound_stats`.`lat_avg`) + abs(`postcodes`.`long`-`outbound_stats`.`long_avg`)) > (`outbound_stats`.`lat_stddev`*3 + `outbound_stats`.`long_stddev`*3 )) ORDER BY (`lat_offset`+`long_offset`) DESC Excel Magic: ="INSERT INTO `postcodes` VALUES (NULL, """&A6&""","""&B6&""","""&C6&""","""&D6&""","""&E6&""","""&F6&""","""&G6&""","""&H6&""");"