【问题标题】:Subquery to get derived value获取派生值的子查询
【发布时间】:2021-10-29 06:10:26
【问题描述】:

我在 MySQL 中有下表 T,包含 A 列和 B 列。

我想查询此表以获取值“C”,该值包含“A”列中的值出现在“B”列中的次数。例如,1 在 B 列中出现 2 次,因此 C 列的第一行应该是 2。我不想遍历表,所以我想使用子查询来获取它。所需的输出如下所示。

我尝试使用以下查询

SELECT A, B, (SELECT COUNT(A) FROM T WHERE B = A) AS C
FROM T

但我在 C 列中的所有行都为 0。请帮我找出错误。

【问题讨论】:

    标签: mysql sql join count subquery


    【解决方案1】:

    使用相关子查询:

    SELECT t1.A, t1.B,
          (SELECT COUNT(*) FROM tablename t2 WHERE t2.B = t1.A) AS C 
    FROM tablename t1
    

    或者:

    SELECT t1.A, t1.B,
          (SELECT SUM(t2.B = t1.A) FROM tablename t2) AS C 
    FROM tablename t1
    

    或者使用自左连接和聚合:

    SELECT t1.A, t1.B, COUNT(t2.B) AS c
    FROM tablename t1 LEFT JOIN tablename t2
    ON t2.B = t1.A
    GROUP BY t1.A, t1.B
    

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 2020-12-17
      • 2011-05-15
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 2016-08-05
      • 1970-01-01
      相关资源
      最近更新 更多