gpt4 book ai didi

mysql - 使用 SQL 和 Tableau 进行方差分析

转载 作者:行者123 更新时间:2023-11-29 12:04:37 24 4
gpt4 key购买 nike

情况是这样的。现在我们有两个数据库。数据库A是我部门使用的。我们每季度将数据输入到各种表格(基于网络的前端)中。该事件完成后,所有数据都会被推送到数据库 B(整个业务的存储库)上的相应表中。我没有参与将这些数据从数据库 A 推送到数据库 B,而且我有点模糊首先是如何发生这么多差异的,但是,我的任务是改进随后发生的差异分析事件。某个 IT 人员在某个时刻设置了一个程序,该程序运行数据并将数据转储到方差分析表中(然后将其提取到 Excel 工作表中),设置如下:

糟糕的 table

ID A.Col A B.Col A 标志 Col A A.Col B B.Col B 标志 Col B
1 黄色 黄色 0 5 5 0
2 黄绿色 1 3 2 1
3 蓝色 蓝色 0 7 7 0
4 红 蓝 1 4 2 1
5 黄红 1 1 3 1

我们尝试执行方差分析的其中一个表有 40 列,结果方差分析表中有 120 多列:数据库 a 中的列、数据库 b 中的列以及指示的标志列两列之间是否存在差异(如果没有差异则为 0,如果存在差异则为 1)。

正如您所想象的那样,从 Excel 文件中将此提取导入到 Tableau 中,我可以实现的可视化效果非常有限。我可以访问数据库 A 和数据库 B 的后端,并且实际上可以将 Tableau 直接连接到各自数据库中的表(而不是依赖 excel 提取或 excel 提取来自的表)并使用自定义 SQL以我想要的方式提取数据,并希望有一种方法可以使用 SQL 来实现不同的表布局,更像是这样:

更好的 table

ID 标志名称 值 A 值 B
2 旗 A 黄绿色
2 标志 B 3 2
4 旗 A 红蓝
4 标志 B 4 2
5 旗 A 黄红
5 标志 B 1 3

理想情况下,如上所述,这个新布局将能够排除没有差异的任何行/列,但如果无法实现这一点,我很高兴有一个名为“标志值”的附加列' 然后过滤掉零。

那么,我该如何在 SQL 中编写 select 语句来实现这一点:

数据库A

ID Col A Col B
1 黄 5
2 黄色 3
3 蓝色 7
4 红 4
5 黄色 1

数据库B

ID Col A Col B
1 黄 5
2 绿色 2
3 蓝色 7
4 蓝色 2
5红3

进入BETTER TABLE,以便我可以在 Tableau 中以有意义的方式实际使用这些数据?非常感谢 Stack Overflow SQL 专家的帮助!

最佳答案

我的方法是使用包含联合的嵌套查询。您可能可以使用pivot/unpivot来实现这一点,尽管我经常发现这种语法很麻烦,尤其是当表有很多列时。

尝试类似的方法:

MS SQL Server

SELECT a.ID, [Flag Name], [Value A], [Value B]
FROM (SELECT a.ID
, [Flag Name] = CASE WHEN a.ColA != b.ColA THEN 'Flag A' ELSE NULL END
, a.ColA [Value A]
, b.ColA [Value B]
FROM TableA a
JOIN TableB b on a.ID = b.ID
UNION ALL
SELECT b.ID
, [Flag Name] = CASE WHEN a.ColB != b.ColB THEN 'Flag B' ELSE NULL END
, CAST(a.ColB AS VARCHAR(1)) [Value A]
, CAST(b.ColB AS Varchar(1)) [Value B]
FROM TableA a
JOIN TableB b on a.ID = b.ID
) a
WHERE [Value A] != [Value B]
ORDER BY ID

MySQL

SELECT a.ID, `Flag Name`, `Value A`, `Value B`
FROM (SELECT a.ID
, CASE WHEN a.ColA != b.ColA THEN 'Flag A' ELSE NULL END AS`Flag Name`
, a.ColA `Value A`
, b.ColA `Value B`
FROM TableA a
JOIN TableB b on a.ID = b.ID
UNION ALL
SELECT b.ID
, CASE WHEN a.ColB != b.ColB THEN 'Flag B' ELSE NULL END AS `Flag Name`
, CAST(a.ColB AS CHAR(1)) `Value A`
, CAST(b.ColB AS CHAR(1)) `Value B`
FROM TableA a
JOIN TableB b on a.ID = b.ID
) a
WHERE `Value A` != `Value B`
ORDER BY ID

关于mysql - 使用 SQL 和 Tableau 进行方差分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31747353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com