mysql连接和计数
不知何故,我没有成功地创建我想要的查询 DB与位置有关,有以下相关表格mysql连接和计数,mysql,Mysql,不知何故,我没有成功地创建我想要的查询 DB与位置有关,有以下相关表格 t\u location-位置列表,包括字段t\u location\u zipcode,以及t\u location\u id\u location t_zipcodecity-连接表只是t_zipcodecity\u zipcodecity\u id\u city t\u city-城市列表,带有t\u city\u id\u city t\u citystate-连接表,t\u citystate\u id\u城市,
-位置列表,包括字段t\u location
,以及t\u location\u zipcode
t\u location\u id\u location
-连接表只是t_zipcodecity\u zipcodecity\u id\u cityt_zipcodecity
-城市列表,带有t\u city
t\u city\u id\u city
-连接表,t\u citystate\u id\u城市,t\u citystate\u id\u状态t\u citystate
-具有t_state\u id\u state的状态列表t_state
SELECT DISTINCT `t_state_id_state`
, `t_state_name_full`
FROM (`t_state`)
LEFT JOIN `t_citystate` ON `t_state_id_state` = `t_citystate_id_state`
LEFT JOIN `t_city` ON `t_citystate_id_state` = `t_city_id_city`
LEFT JOIN `t_zipcodecity` ON `t_city_id_city` = `t_zipcodecity_id_city`
LEFT JOIN `t_location` ON `t_zipcodecity_zipcode` = `t_location_zipcode`
ORDER BY `t_state_name_full` asc
这很好用
现在,我还需要/想要的是获得每个州的位置数量,这一点令我失望。我不知道是否可以在这个查询中完成,或者我是否需要另一个查询,无论哪种方式,我都需要帮助 您可以使用计数和分组依据。大概是这样的:
SELECT DISTINCT `t_state_id_state`
, `t_state_name_full`
, COUNT(*)
FROM (`t_state`)
LEFT JOIN `t_citystate` ON `t_state_id_state` = `t_citystate_id_state`
LEFT JOIN `t_city` ON `t_citystate_id_state` = `t_city_id_city`
LEFT JOIN `t_zipcodecity` ON `t_city_id_city` = `t_zipcodecity_id_city`
LEFT JOIN `t_location` ON `t_zipcodecity_zipcode` = `t_location_zipcode`
GROUP BY `t_state_id_state` , `t_state_name_full`
ORDER BY `t_state_name_full` asc
好的,这看起来不错,我的左连接不好,我最初试图得到所有的状态,这就是为什么我使用它们。但我改为使用内部联接
SELECT t_state_id_state,
t_state_name_full,
COUNT(DISTINCT t_location_id_location) AS locations_number
FROM t_state
INNER JOIN t_citystate ON t_citystate_id_state = t_state_id_state
INNER JOIN t_city ON t_city_id_city = t_citystate_id_city
INNER JOIN t_zipcodecity ON t_zipcodecity_id_city = t_city_id_city
INNER JOIN t_location ON t_location_zipcode = t_zipcodecity_zipcode
GROUP BY t_state_id_state
ORDER BY t_state_name_full ASC
然后我最终得到了一个看起来不错的结果 事实并非如此,结果肯定是错误的。完整总数太高,每个州的位置数也太多(有些太高,有些太低),我建议从删除所有左连接开始,并获取一个计数,确保其正确,然后一次添加一个。这可能是因为您的数据不好,或者是您没有预料到的数据。例如,一个城市有多个城市状态id。我原则上理解你的意思,但。。。。如果我只是使用SELECT DISTINCT
t\u state\u id\u state
,t\u state\u name\u full
,COUNT(*)FROM(t\u state
)-我得到1个州和州的总数。我是否正确理解城市
和州
之间存在多对多关系,以及城市
和位置
之间存在另一种多对多关系?好吧,看起来不错,我的错误在于左侧连接,我最初试图得到所有的状态,这就是为什么我使用它们。但我将其更改为使用内部联接code
SELECT t_state_id_state,
t_state_name_full,
COUNT(DISTINCT t_location_id_location) AS locations_number
FROM t_state
INNER JOIN t_citystate ON t_citystate_id_state = t_state_id_state
INNER JOIN t_city ON t_city_id_city = t_citystate_id_city
INNER JOIN t_zipcodecity ON t_zipcodecity_id_city = t_city_id_city
INNER JOIN t_location ON t_location_zipcode = t_zipcodecity_zipcode
GROUP BY t_state_id_state
ORDER BY t_state_name_full ASC