MySQL GROUP BY w / ORDER BY没有期望的结果

时间:2017-03-30 22:40:27

标签: mysql

我有一个尝试检索人员ID的查询,但前提是这些人员有多个地址。我也在检查我上次打电话给他们的时间是至少30天前。最后,我正在尝试订购结果,因为我想用最早的last_called日期时间来提取结果:

SELECT 
  p.id,
  COUNT(*) AS cnt 
FROM
  people p 
  LEFT JOIN addresses a 
    ON p.id = a.id 
WHERE p.last_called <= DATE_SUB(NOW(), INTERVAL 30 DAY) 
GROUP BY p.id 
HAVING COUNT(*) > 1
ORDER BY p.last_called ASC 
LIMIT 25

目前,结果并不排除只有一个地址的人。我甚至没有达到我知道排序顺序是否正确的程度,但是现在我只想知道为什么我的查询没有提取结果,其中至少有2个地址用于人

1 个答案:

答案 0 :(得分:0)

如果您不想包含没有地址的人,那么我建议您使用INNER JOIN代替LEFT JOINDISTINCT来获取不同的地址ID (以防万一你有重复的映射),例如:

SELECT 
  p.id,
  COUNT(DISTINCT(a.id)) AS cnt 
FROM
  people p 
  JOIN addresses a 
    ON p.id= a.peopleid 
WHERE p.last_called <= DATE_SUB(NOW(), INTERVAL 30 DAY) 
GROUP BY p.id 
HAVING COUNT(DISTINCT(a.id)) > 1

Ordering而言,MySQL在排序结果之前评估GROUP BY,因此,您需要将查询包装在另一个查询中以获取有序结果。

<强>更新

您需要加入peopleId地址记录,而不是加入援助,才能获得人员记录。