Как выбрать различное количество / выбрать несколько полей таблицы с объединением - PullRequest
0 голосов
/ 04 июля 2019
  • Есть две таблицы - Table1 и Table2
  • вместе с другими полями table. Table1 имеет поля t11, t12, t13
  • вместе с другими полями table Table2 имеет поля t22
  • все эти поля будут иметь значения либо 1, либо 0
  • Для каждой записи в таблице Table1 будет минимум один и максимум любое количество записей в Table2
  • Первичный ключTable1 добавляется в Table2 как внешний ключ для поддержания отношения данных
  • Мне нужно количество записей:

    1. количество записей, значение t11 = 0 которых в таблице 1
    2. количество записей со значениями t12 = 0 в таблице1
    3. число записей со значениями t13 = 0 в таблице1
    4. количество записей со значениями t22 = 1 вTable2 и
    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
  • Как: if Таблица2 содержит 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 голосов
/ 08 июля 2019

Запрос, который работал для меня:

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`
...