获取表中一列的计数和其他表中相同列匹配的计数

时间:2018-03-14 07:58:24

标签: mysql

我有两张表格如下

    table 1: raw
    dateCol id
1   01.01.2001 00:00:00 AAPL
2   02.01.2001 00:00:00 MSFT
3   03.01.2001 00:00:00 INFY

    table 2: universe
    udateCol    uid
1   01.01.2001 00:00:00 AAPL
2   02.01.2001 00:00:00 GOOGL
3   03.01.2001 00:00:00 INFY

我想从宇宙中uid的原始匹配中提取原始ID和ID数量。所以我在Mysql中尝试了以下查询:

select universe.udateCol, count(raw.id) as rawCount, count(universe.uid) as uniCount from universe left join raw on universe.udateCol = raw.dateCol AND raw.id = universe.uid group by universe.udateCol order by universe.udateCol;

使用上面的查询,我得到以下输出

    udateCol    rawCount    uniCount
1   01.01.2001 00:00:00 1   1
2   02.01.2001 00:00:00 0   1
3   03.01.2001 00:00:00 1   1

但我希望输出如下:

    udateCol    rawCount    uniCount
1   01.01.2001 00:00:00 1   1
2   02.01.2001 00:00:00 1   0
3   03.01.2001 00:00:00 1   1

如果有人想现场查看,可以查看here

EDIT1:

我希望获取每个日期的原始表中存在的计数,以及同一日期在Universe表中匹配的计数

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT DATE(A.dateCol) dateCol, COUNT(A.id) rawCount, COUNT(B.id) uniCount
FROM raw A LEFT JOIN universe B
ON A.id=B.uid AND DATE(A.dateCol)=DATE(B.udateCol)
GROUP BY DATE(A.dateCol);

答案 1 :(得分:0)

不是答案。评论太久了,有点厌倦了试图从这块石头上抽血......

请考虑以下事项:

drop table if exists raw;
drop table if exists universe;

create table raw(dateCol date, id VARCHAR(20),PRIMARY KEY(datecol,id));
create table universe(udateCol date, uid VARCHAR(20),PRIMARY KEY(udatecol,uid));

insert into raw values
('20010101','AAPL'),
('20010102','MSFT'),
('20010103','INFY'),
('20010104','HOG');


insert into universe values
('20010101','AAPL'),
('20010102','GOOGL'),
('20010103','INFY'),
('20010105','HOG');

注意:我在每种情况下都对PRIMARY KEY做出了假设。如果这不正确,请澄清。

鉴于此数据集,期望的结果应该是什么样的?在回答之前先想想。