【问题标题】:Prevent duplicates in mysql group by with join statement使用 join 语句防止 mysql 组中的重复项
【发布时间】:2012-11-17 19:10:19
【问题描述】:

我有一个不可能是新的问题,但我不知道如何得到我想要的答案。这可能是我缺少的一些简单的东西

使用 mysql 5.5,我有 2 个表,'referrals' 和 'status'。我要统计已取消的推荐,按 appt_date 分组:

SELECT SUM(1) AS count, appt_date FROM referrals
GROUP BY appt_date
JOIN status ON referrals.id=status.referral_id
WHERE status.status_name="cancelled"

这工作正常,直到我有一个被取消两次的推荐。换句话说,具有给定 id 的引荐在状态表中有 2 行与匹配的引荐_id 将被计算两次。

这里做join操作时如何只统计每条推荐记录一次?

编辑: 我真正的问题应该是这样的:

SELECT SUM(quantity) AS count, appt_date FROM referrals
GROUP BY appt_date
JOIN status ON referrals.id=status.referral_id
WHERE status.status_name="cancelled"

因为每个推荐都可以有自己的数量。

【问题讨论】:

  • 根据 IrishDubGuy 提供的答案,我认为我不应该尝试简化我的问题。上面编辑的问题。

标签: mysql join group-by


【解决方案1】:

尝试将 count 更改为 count(DISTINCT id)

【讨论】:

  • 或者更确切地说将SUM(1)更改为COUNT(DISTINCT id)
  • 这当然有效,感谢您的回答。我试图简化我的问题,我想我现在不应该在这里看到答案。有关真正的查询,请参阅我编辑的问题。
【解决方案2】:

所以计数只是一个标签,我应该看到的:)

诱惑是做 SUM(DISTINCT quantity) 但显然只会删除重复的“数量”,这不是你想要的。看起来您需要加入派生选择表。看看这个...

http://www.sqlteam.com/article/how-to-use-group-by-with-distinct-aggregates-and-derived-tables

【讨论】:

  • 是的,count 是一个标签(回想起来是个错误的选择),但你在我最初的问题上是正确的。您提供的链接非常完美,谢谢。我希望有一个更直接的方法,但没有这样的运气!
猜你喜欢
  • 2011-02-16
  • 1970-01-01
  • 2010-10-25
  • 2015-08-05
  • 2017-02-18
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 2021-07-17
相关资源
最近更新 更多