选择与同一表中的另一个字段相对应的每个不同字段



我在从一个表中提取数据时遇到问题。

假设我有一张这样的表格:

t_stat,包含列:statId、userId、国家/地区、安装程序ID、日期。

例如值:

1, 1, Belgium, 1, 2014-04-06 18:19:03 ||
2, 2, Germany, 2, 2013-05-07 18:19:03 ||
3, 3, Italy, 3, 2018-06-08 18:19:03

因此,我需要:我需要挑选每个不同的国家,并计算每个日期的安装量。它应该是这样的:9行

2014-04-06 18:19:03 Belgium 1
2014-04-06 18:19:03 Germany 0
2014-04-06 18:19:03 Italy 0
2013-05-07 18:19:03 Belgium 0
2013-05-07 18:19:03 Germany 1
2013-05-07 18:19:03 Italy 0
2018-06-08 18:19:03 Belgium 0
2018-06-08 18:19:03 Germany 0
2018-06-08 18:19:03 Italy 1

有什么办法解决吗?

如果您不需要零值的行,这是微不足道的。

SELECT DATE(date) date, country, COUNT(*) n
FROM inst
GROUP BY DATE(date), country
ORDER BY date, country

但你确实需要它们。因此:

首先,您需要将(非规范化的(原始数据拆分为三个虚拟表以供参考。

这个虚拟表格为您提供您所在的国家/地区。

SELECT DISTINCT country FROM inst

这会给你日期。

SELECT DISTINCT DATE(date) date FROM inst

这将为您提供在每个国家的每个日期的运营计数。

SELECT DATE(date) date, country, COUNT(*) n

然后您需要将这三个虚拟表连接在一起。最后一个使用LEFT JOIN,这样零值就不会被抑制。并且,使用IFNULL来显示零而不是null。

SELECT  c.country, d.date, IFNULL(i.n,0) n
FROM (
SELECT DISTINCT country FROM inst
) c
JOIN (
SELECT DISTINCT DATE(date) date FROM inst
) d ON 1=1
LEFT JOIN (
SELECT DATE(date) date, country, COUNT(*) n
FROM inst
GROUP BY DATE(date), country
) i ON c.country = i.country AND d.date = i.date
ORDER BY d.date, c.country

下面是一个例子。https://www.db-fiddle.com/f/vab5mvJepWn2YFLJ28kGxA/0

相关内容

  • 没有找到相关文章

最新更新