根据两个表的几个条件计算出现次数

本教程将介绍根据两个表的几个条件计算出现次数的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

根据两个表的几个条件计算出现次数 教程 第1张

问题描述

我有两张桌子.

表 1:

+------------+-------------+------+-----+---------+-------+
| Field| Type  | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID| varchar(255)| NO| PRI | NULL | |
| Sex  | int(20)  | YES  |  | NULL | |
| Age  | varchar(255)| YES  |  | NULL | |
+------------+-------------+------+-----+---------+-------+

表 2:

+-----------+--------------+------+-----+---------+-------+
| Field  | Type| Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| ID  | varchar(255) | NO| PRI | NULL | |
| var1| varchar(255) | YES  |  | NULL | |
| var2| varchar(255) | YES  |  | NULL | |
+-----------+--------------+------+-----+---------+-------+

我想要做的是,基于三个变量的条件,例如:

性别 = 1

年龄 = 3(组)

var1 = 威斯康星州"

计算出现次数.即符合条件的人数.

我发现的主要问题是第二张表中每个人的样本数量不同.所以table2的行数远大于number1.

说清楚:

Table1
+------------+-------------+------+
| ID| Sex| Age  |
+------------+-------------+------+
| 1 | 1  | 2 |
| 2 | 0  | 4 | 
| 3 | 0  | 3 | 
+------------+-------------+------+

Table 2
+------------+-------------+---------+
| ID| Var1  | Var2 |
+------------+-------------+---------+
| 1.1  | "Wisconsin" | var2_1  |
| 1.2  | "Wisconsin" | var2_2  | 
| 1.3  | "Wisconsin" | var2_3  | 
+------------+-------------+---------+

我想首先需要根据 var 1 为表 2 预选个人,然后我可以继续查询出现的情况,但到目前为止我还没有找到方法这样做.

任何帮助将不胜感激.

推荐答案

如果我没看错的话,你可以使用existstable2进行过滤:

select count(*) as cnt
from table1 t1
where t1.sex = 1 and t1.age = 3 and exists (
 select 1
 from table2 t2 
 where t2.id = t1.id and t2.var1 = 'Wisconsin'
)

这会计算第一个表中 行具有威斯康星州的第一个表中的行.另一方面,如果您想确保第二个表中的满足条件,那么一个选项是:

select count(*) as cnt
from table1 t1
inner join (
 select id
 from table2
 group by id
 having min(var1 <=> 'Wisconsin') = 1
) t2 on t2.id = t1.id
where t1.sex = 1 and t1.age = 3

好了关于根据两个表的几个条件计算出现次数的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。