sql查询问题

表有A,B两个字段,现在要求输出【A,B,count(C)】,其中count(C)是B等于A的数目。
例如:
A B
1 2
2 3
3 2
输出:
1 2 0
2 3 2
3 2 1
应该要怎么写sql语句呢。
具体应用就是查询当前的文件夹信息,同时标出每个文件夹包含的子文件数。

阅读 2.3k
2 个回答

@aristotll 的写法,从结果应该是没问题的,但使用子查询的方式可能会存在性能问题,可以按照下面的方式改写:

SELECT t1.a, t1.b, ifnull(t2.cnt, 0)
FROM new_table t1 
  LEFT JOIN (
    SELECT b, count(*) AS cnt
    FROM new_table 
    GROUP BY b
  ) t2 ON t1.a = t2.b

其思想就是让SQL做集合的运算,而不是像其他编程语言那样,显式的让数据库做循环操作。

CREATE TABLE new_table (
    A INT NOT NULL,
    B INT NOT NULL
);
INSERT INTO new_table (A, B) VALUES (1, 2), (2, 3), (3, 2);
SELECT
    a.A,
    a.B,
    (SELECT count(b.B)
     FROM new_table b
     WHERE b.B = a.A) C
FROM new_table a;

虽然比较丑(看下其他人有更好的做法吗)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进