gpt4 book ai didi

mysql - SQL:如何比较表,即计算连接表中的行数?

转载 作者:行者123 更新时间:2023-11-29 06:46:20 26 4
gpt4 key购买 nike

我正在连接两个表,我想获得一些描述该操作的简单统计数据,即:

  • 每个表中总共有多少行,
  • 有多少人会加入
  • 还有多少人未加入

我确信必须有一些智能且简单的方法来即时获取所有信息 - 无需创建和计算额外的标志/变量,也无需进行长序列的查询。

如果有这样的解决方案来连接两个以上的数据集,并且当3个表时,可以轻松地计算下图中可见的7组记录,那就太好了进行比较。

我目前正在从 SAS 进行查询,但在使用 Oracle 和 MS SQL 时经常遇到同样的问题 - 我正在寻找一些与 dbms 无关的解决方案。

enter image description here

最佳答案

使用 SAS PROC SQL 时,最有用的选项之一是 verbose 。例如:

%macro create_data(num, min, max);
/* Creates sample datasets */
DATA have&num.;
do i=&min. to &max.;
ID = i; OUTPUT;
end; DROP i;
RUN;
%mend create_data;

%create_data(1,1,10);
%create_data(2,5,15);
%create_data(3,9,100);

PROC SQL verbose;
/* Sample join */
CREATE table want as
SELECT have1.ID as ID1, have2.ID as ID2, have3.ID as ID3
FROM have1
FULL JOIN have2
on have1.ID=have2.ID
RIGHT JOIN have3
on have3.ID=have1.ID;
QUIT;

将在 SAS 日志中打印以下内容:

Data Set WORK.HAVE1 is num=1 and tag=0001. NOBS=10, lrecl=8.
Data Set WORK.HAVE2 is num=2 and tag=0002. NOBS=11, lrecl=8.
Data Set WORK.HAVE3 is num=3 and tag=0004. NOBS=92, lrecl=8.
NOTE: Table WORK.WANT created, with 92 rows and 3 columns.

这对于查看连接的行为非常有用,尤其是对于多个数据集。

如果您在 SAS 之外工作并正在寻找通用 SQL 解决方案,我认为您最好(也是最快)的解决方案是查询计数。例如,从上面的选择:

* how many rows I have in total in each of tables ;
SELECT count(*) from have1;
SELECT count(*) from have2;
SELECT count(*) from have3;
* how many of them are joined ;
SELECT count(*) from want;
* how many will be left unjoined ;
SELECT count(*) from want where missing(ID1) or missing(ID2) or missing(ID3);

在不了解具体情况的情况下,很难给您提供额外的建议。 SQL 没有标准解决方案的部分原因是不同类型的联接本质上彼此有很大不同。

关于mysql - SQL:如何比较表,即计算连接表中的行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49257561/

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