连接两个表时的sql查询

6kkfgxo0  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(380)

我需要在sql中连接两个表,并且我需要找到表a中有多少客户id也在表b中找到,提取表b中每年也购买了多少客户id。我的问题如下:

  1. SELECT
  2. a.year, count(distinct(a.id),
  3. count (distinct(b.id)
  4. FROM
  5. purchase as A,
  6. purchase2 as B
  7. WHERE
  8. (a.id=b.id)
  9. AND
  10. a.year>2010
  11. GROUP BY a.year

是这样吗?我需要在select语句中包含count(distinct(b.id))吗?我是否也需要按b.year分组?
提前感谢您的帮助

kyvafyod

kyvafyod1#

更改distinct,可以进行内部联接以确保:

  1. SELECT
  2. A.year,
  3. count(DISTINCT A.id),
  4. count (DISTINCT B.id)
  5. FROM
  6. purchase as A
  7. INNER JOIN purchase2 B ON B.id = A.id
  8. WHERE
  9. A.year>2010
  10. GROUP BY
  11. A.year,
  12. B.year
ruoxqz4g

ruoxqz4g2#

我想 union all 聚合是最好的方法。从每个id/年的信息开始:

  1. select id, year, max(in_a), max(in_b)
  2. from ((select distinct id, year, 1 as in_a, 0 as in_b
  3. from purchase
  4. ) union all
  5. (select distinct id, year, 0 as in_a, 1 as in_b
  6. from purchase2
  7. )
  8. ) ab
  9. group by id, year;

然后按年度汇总:

  1. select year,
  2. sum(in_a) as total_a,
  3. sum(in_b) as total_b,
  4. sum(in_a * in_b) as in_both
  5. from (select id, year, max(in_a), max(in_b)
  6. from ((select distinct id, year, 1 as in_a, 0 as in_b
  7. from purchase
  8. ) union all
  9. (select distinct id, year, 0 as in_a, 1 as in_b
  10. from purchase2
  11. )
  12. ) ab
  13. group by id, year
  14. ) iy
  15. group by year;
展开查看全部

相关问题