在一个主键为Person_Id的表中,地址包含多个索引,如
Road_Name,
House_Number,
Postcode
由于某些地址是重复的,因此可以使用SQL查询从单独的索引为每个地址创建唯一标识符吗?
然后使用唯一标识符,查找每个地址通过Person_Ids的人数是多少?
答案 0 :(得分:3)
要获取每个地址的行数,我们可以使用GROUP BY
和汇总...
SELECT t.addr_road_name
, t.addr_house_number
, t.addr_postal_code
, COUNT(DISTINCT t.person_id) AS `cnt_persons`
FROM t
GROUP
BY t.addr_road_name
, t.addr_house_number
, t.addr_postal_code
如果我们要排除只有一个人的地址,我们可以添加
HAVING COUNT(DISTINCT t.person_id) > 1
为了获得大集合的最佳性能,我们希望通过使用具有GROUP BY
子句中引用的前导列,列的索引来避免“使用filesort”操作,例如
... ON t (addr_postal_code, addr_house_number, addr_road_name)