从另一个表中逐行计数,在sql中的两个表上保存一些条件

Posted

技术标签:

【中文标题】从另一个表中逐行计数,在sql中的两个表上保存一些条件【英文标题】:count of row by row from another table holding some conditions on both tables in sql 【发布时间】:2020-08-25 12:26:36 【问题描述】:

有两个表Table1和Table2

A B C  S
a 1 21 Summer
b 2 22 Summer
c 3 34 Summer

D E F  S
a 1 21 Summer
d 5 22 Summer
f 2 34 Summer

我想根据表第一列的 B 列小于表第二列 E 的值等条件,从表第二列中获取表第一列的所有列和列 F 的计数。

我试过这个查询

select a.*,
      (select count(F) from Table2 JOIN Table1 on table1.S=table2.S where table1.B<table2.E ) AS Cnt
from Table1 a

但是,对于所有不正确的行,它给了我相同的计数 我需要根据满足的条件进行计数。

【问题讨论】:

不等式谓词中不允许有相关列 这是一个常见问题解答。请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:***.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你的期望和原因。 【参考方案1】:

这会起作用

DECLARE @T1 TABLE (A Varchar(10), B INT, C INT,  S  Varchar(10))
DECLARE @T2 TABLE (D Varchar(10), E INT, F INT,  S  Varchar(10))
INSERT INTO @T1 VALUES
('a', 1, 21,'Summer'),
('b', 2 ,22,'Summer'),
('c', 3, 34,'Summer')
INSERT INTO @T2 VALUES
 
('a', 1, 21,'Summer'),
('d', 5 ,22,'Summer'),
('f', 2 ,34,'Summer')


  SELECT
    T1.A,T1.B,T1.C,T1.S,
    COUNT(T2.S) as Counts
FROM @T1 T1
  left JOIN @T2 T2
  ON T1.S = T2.S AND T1.B < T2.E
GROUP BY T1.A,T1.B,T1.C,T1.S

输出

A   B   C   S   Counts
a   1   21  Summer  2
b   2   22  Summer  1
c   3   34  Summer  1

【讨论】:

【参考方案2】:
    select *,
  (select count(F)
   from T2
   where T1.S = T2.S AND T1.B < T2.E
  ) as Cnt  from T1

【讨论】:

不等式谓词中不允许有相关列【参考方案3】:

我认为你只需要一个相关的子查询:

select a.*,
      (select count(t2.F)
       from Table2 t2 
       where a.S = t2.S and t1.B < t2.E
      ) as Cnt
from Table1 a

【讨论】:

相关子查询不起作用你知道其他解决方案吗 还有其他解决方案吗?

以上是关于从另一个表中逐行计数,在sql中的两个表上保存一些条件的主要内容,如果未能解决你的问题,请参考以下文章

Python & Bigquery:使用 for 循环在表中逐行查询和插入数据

在向量中逐行查找

MySQL:从另一个表中的值“修补”表上的现有数据

基于匹配值的雪花SQL计数和从另一个表求和

如何在 Julia 中逐行读取文件?

Matlab中逐行保存文本文件中数组数据的解决方法