【问题标题】:count where values appear in another table sql计算值出现在另一个表 sql 中的位置
【发布时间】:2018-07-18 14:58:12
【问题描述】:

我有一个表格,我想知道填写表格的人有多少帐户。

表单进入一个 SQL 表,其中有一列是电子邮件地址,我想将它与另一个包含所有帐户的表中的列进行比较。

table1:(表单条目)

电子邮件地址

  • john@hotmail.com
  • mary@hotmail.com
  • ann@hotmail.com
  • john@hotmail.com
  • peter@hotmail.com

table2:(客户账户表)

电子邮件地址

  • john@hotmail.com
  • ann@hotmail.com
  • james@hotmail.com

我需要一个 SQL 来告诉我 table1 中有多少人拥有一个帐户。在这个例子中,答案是 2。

我已经做到了这一点,但是当我在几个不同的表上进行测试时,我得到的结果比我拥有的帐户数量要高:

SELECT DISTINCT
  COUNT(email_address)
FROM
  table2
WHERE
  EXISTS
  (SELECT 1 
   FROM table1 
   WHERE table1.email_address = table2.email_address );

【问题讨论】:

  • 请在标签中指定您使用的数据库引擎
  • 感谢更新,它实际上是在一个允许查询 SQL 数据库的低代码平台内,而且我对 SQL 还是很陌生。
  • 我的意思是数据库引擎之间在 SQL 语法方面可能存在差异。如果您指定您要使用的那个会很好。
  • 哪个 dbms?????

标签: sql


【解决方案1】:

distinct 应该在 count() 内:

SELECT COUNT(DISTINCT t1.email_address) 
FROM table1 t1
WHERE EXISTS (SELECT 1 
              FROM table2 t2
              WHERE t1.email_address = t2.email_address
              );

【讨论】:

    【解决方案2】:

    简单的连接怎么样:

    SELECT COUNT(DISTINCT t1.email_address)
    FROM table1 t1
    INNER JOIN table2 t2
        ON t1.email_address = t2.email_address;
    

    这假定第二个表中的电子邮件地址是唯一的,因为一个帐户可能只注册一次。如果是这样,则内部联接将过滤掉所有没有帐户的电子邮件地址条目。

    如果您想继续使用EXISTS 方法,请参阅@Yogesh 答案。

    【讨论】:

    • 我打算去add a demo,但目前 SQLFiddle 似乎遇到了错误。不同的计数不是零,实际上是两个。
    • 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多