【问题标题】:MySQL weird things happeningMySQL发生奇怪的事情
【发布时间】:2013-02-27 00:37:48
【问题描述】:

我有一个 mysql 行,我试图获取按省分组的不同数量的电子邮件地址。而且它似乎给出了奇怪的值。

如果我为每个省执行以下操作(计算省的不同电子邮件地址)

SELECT COUNT(DISTINCT(email_address)) as COUNT 
FROM entries 
WHERE subscribe='1' 
AND province='ns'

并将它们全部加起来。我得到的数字大约比我做的多 200

SELECT COUNT(DISTINCT(email_address)) as COUNT 
FROM entries 
WHERE subscribe='1'

也匹配

SELECT COUNT(DISTINCT(email_address)) as COUNT 
FROM entries 
WHERE subscribe='1' 
AND province IN('ns','nb','pei')

但不匹配

SELECT COUNT(DISTINCT(email_address)) as COUNT 
FROM entries 
WHERE subscribe='1' 
GROUP BY province

如果我这样做

SELECT COUNT(DISTINCT(email_address)) as COUNT 
FROM entries 
WHERE subscribe='1'

所以第2个和第4个匹配,第1个和第3个和第5个匹配。但是第 2/4 个比第 1/3/5 个多 200 个。

我想要的只是不同电子邮件地址的数量,其中 subscribe 是 1 按省分组的。而且似乎是不可能得到的。

【问题讨论】:

  • 同一个邮箱在多个省份注册?您无法真正比​​较各种版本,因为您正在更改计数所基于的基础。有+无分组确实会极大地改变条件。

标签: php mysql


【解决方案1】:

一个电子邮件地址是否可能与多个省份相关联?你可以做一个查询来测试这个

SELECT email_address, count(distinct province)
FROM entries
WHERE subscribe = '1'
GROUP BY email_address HAVING count(distinct province) > 1

这可能就是你的差异所在

无论哪种方式,此查询都会为您提供所需的内容

SELECT province, COUNT(DISTINCT email_address) as COUNT 
FROM entries 
WHERE subscribe = '1' 
GROUP BY province
ORDER BY province

【讨论】:

  • 如果我只是对电子邮件地址(#5)进行区分,那么返回的数字比我高出 200。
  • @Steven 我为另一种可能性更新了我的答案(并将我原来的答案移到了底部)
  • 看来确实是问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-19
  • 1970-01-01
  • 2011-12-05
  • 2022-01-22
  • 2011-11-25
  • 2017-01-26
  • 1970-01-01
相关资源
最近更新 更多