为了简化这里的事情,我的表结构是:
表名:OCRD
CardCode E_Mail U_NoEmail
123 test@hi.com Y
124 test@hi.com N
125 other@hi.com Y
126 mail@hi.com N
该表格包含唯一ID,电子邮件地址和第三列(U_NoEmail
),其中显示电子邮件的首选项为opted in
或不是电子邮件。这有点违反直觉,Y =选择退出,N = Opted In
。 U_NoEmail
列也可以是NULL
。
我正在尝试对此表使用单个查询来返回计数。计数是表中U_NoEmail
的值超过一个的电子邮件地址数。换句话说,我想查找选择加入和退出的电子邮件地址总数,从商业角度来看,这些地址无用。
我无法弄清楚如何做到这一点。例如,我可以通过电子邮件地址获取此信息,并使用以下查询:
SELECT E_Mail, COUNT(DISTINCT E_Mail)
FROM OCRD
GROUP BY E_Mail
HAVING COUNT(DISTINCT U_NoEMail) > 1
返回U_NoEmail
多个值的所有地址。但我无法弄清楚如何将其作为单一总数。如果我尝试以下内容:
SELECT COUNT(*) FROM
(
SELECT E_Mail, COUNT(DISTINCT E_Mail)
FROM OCRD
GROUP BY E_Mail
HAVING COUNT(DISTINCT U_NoEMail) > 1
) result
我收到错误: 没有为'结果'的第2列指定列。
答案 0 :(得分:4)
试试这个,您应该为子查询中的每一列命名
SELECT COUNT(*) FROM
(
SELECT E_Mail, COUNT(DISTINCT E_Mail) **as distEmail**
FROM OCRD
GROUP BY E_Mail
HAVING COUNT(DISTINCT U_NoEMail) > 1
) result
答案 1 :(得分:1)
SELECT COUNT(*) FROM
(
SELECT E_Mail, COUNT(DISTINCT E_Mail) AS EmailCount
FROM OCRD
GROUP BY E_Mail
HAVING COUNT(DISTINCT U_NoEMail) > 1
) result