如何使用连接

时间:2019-07-04 08:55:38

标签: mysql select count

  • 有两个表-Table1和Table2
  • 与其他字段表Table1一起包含字段t11,t12,t13
  • 与其他字段表Table2一起具有字段t22
  • 所有这些字段的值都为1或0
  • 对于表Table1中的每条记录,表2中的记录数最少为1,最大为任意数
  • 将表1的主键作为外键添加到表2中以维护数据关系
  • 我需要以下记录的计数:

    1. 表1中值为t11 = 0的记录数
    2. 表1中值为t12 = 0的记录数
    3. 表1中值为t13 = 0的记录数
    4. 表2中t22 = 1的记录数,并且
    5. 具有值t11 = 1,t12 = 1,t13 = 1和t22 = 0的记录数
    I am currently using the below query to find the count:

    SELECT 
    SUM( CASE WHEN tbl.`t11` = 0 THEN 1 ELSE 0 END) T11Count, 
    SUM( CASE WHEN tbl.`t12` = 0 THEN 1 ELSE 0 END) T12Count, 
    SUM( CASE WHEN tbl.`t13` = 0 THEN 1 ELSE 0 END) T13Count, 
    SUM( CASE WHEN (tbl.`t11` = 1 AND tbl.`t12`=1 AND tbl.`t13`=1 AND tbl2.`t22`='0') THEN 1 ELSE 0 END) T1232Count, 
    SUM( CASE WHEN tbl2.`t22` = '1' THEN 1 ELSE 0 END) T22Count 
    FROM `Table1` AS tbl 
    JOIN JOIN `Table2` AS tbl2 ON tbl.`ID1` = tbl2.`ID2`
  • 此查询根据表2中的记录数返回计数
  • 类似于:如果Table2包含3个记录,用于表1的记录,则返回计数3。

但是, -尽管表2中相对于表1中的记录有多少条记录,我只需要将其计数为单条记录

样本数据和所需的输出:

Table1
-----------------------------------

ID1(PK)     t11     t12     t13     t14
1           1       1       1       a
2           0       1       1       b
4           1       1       1       c
5           1       1       1       d
6           0       1       1       e
7           1       0       1       f
9           1       0       1       g
10          1       1       1       h
11          1       0       1       i
13          1       1       0       j
14          1       1       1       k



Table2
-----------------------------------

ID2(PK)     t22     t123     ID1   
1           0       z        1
2           0       y        2
3           0       x        4
4           1       w        4
5           0       v        5
6           0       u        6
7           0       t        7 
8           0       s        7
9           0       r        9
10          0       q        1
11          0       p        2
12          0       o        10
13          0       n        11
14          0       m        11
15          0       l        13
16          0       l        14


Expected Output:
-----------------------------------
T11Count     T12Count     T13Count     T1232Count     T22Count
2            3            1            4               1

1 个答案:

答案 0 :(得分:0)

对我有用的查询:

SELECT 
SUM( CASE WHEN tbl.`t11` = 0 THEN 1 ELSE 0 END) T11Count, 
SUM( CASE WHEN tbl.`t12` = 0 THEN 1 ELSE 0 END) T12Count, 
SUM( CASE WHEN tbl.`t13` = 0 THEN 1 ELSE 0 END) T13Count, 
SUM( CASE WHEN (tbl.`t11` = 1 AND tbl.`t12`=1 AND tbl.`t13`=1 AND tbl2.`t22`='0') THEN 1 ELSE 0 END) T1232Count, 
SUM( CASE WHEN tbl2.`t22` = '1' THEN 1 ELSE 0 END) T22Count 
FROM `Table1` AS tbl 
JOIN ( SELECT ID2, t22 FROM `Table2` GROUP BY t22) tbl2 ON tbl.`ID1` = tbl2.`ID2`