【问题标题】:How do I use Count in a subquery?如何在子查询中使用 Count?
【发布时间】:2019-07-03 04:27:39
【问题描述】:

我在子查询中使用 count 时遇到问题。我想编写一个查询,返回每个消费者的 cmets 数量,但 count 给出了存在的 cmets 总数。

SELECT con.Consumer_ID, con.Scheduled, con.Been_Called, (SELECT COUNT(*) 
FROM Comments WHERE com.ConsumerID = con.Consumer_ID) AS NumComments
FROM Consumers con
INNER JOIN Comments com
ON con.Consumer_ID = com.ConsumerID

我试图获取每个用户的 cmets 数量,但 NumComments 给了我 Comments 表中存在的 cmets 总数。

【问题讨论】:

    标签: mysql sql database join count


    【解决方案1】:

    您在子查询中的 where 子句不正确:

    SELECT con.Consumer_ID, con.Scheduled, con.Been_Called, 
    (
       SELECT COUNT(*) 
       FROM Comments c WHERE c.ConsumerID = con.Consumer_ID
    ) AS NumComments
    FROM Consumers con
    

    现在它只计算具有匹配 consumer_id 的 cmets

    【讨论】:

      【解决方案2】:

      似乎您过于复杂了。一个简单的聚合连接就可以解决问题,例如:

      SELECT con.Consumer_ID, con.Scheduled, con.Been_Called, COUNT(*) as NumComments
      FROM Consumers con
      INNER JOIN Comments com ON com.Consumer_ID = con.ConsumerID
      GROUP BY con.Consumer_ID, con.Scheduled, con.Been_Called
      

      【讨论】:

        【解决方案3】:
        SELECT con.Consumer_ID, con.Scheduled, con.Been_Called, COUNT(DISTINCT com.CommentID) AS NumComments
        FROM Consumers con
        INNER JOIN Comments com
        ON con.Consumer_ID = com.ConsumerID
        GROUP BY con.Consumer_ID, con.Scheduled, con.Been_Called
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-09-18
          • 1970-01-01
          相关资源
          最近更新 更多