带有计数的 SQlite 嵌套查询
SQlite nested query with counts
我的 Sqlite 数据库中有以下 table :
- ID_container : A5, A5, E12, E12, E12
- ID_line : A5_1, A5_2, E12_1, E12_2, E12_3
- 同意:是,是,否,是,否
在我看来,查询涉及 3 种情况:
- 它计算每个ID_container
的行数
- 它计算每行链接到 ID_container、
的 "yes" 的数量
- 它计算每行 "no" 的数量 ID_container,
预期结果是:
- ID_container : A5, E12
- Number_of_line : 2, 3
- Number_of_yes : 2, 1
- Number_of_no : 0, 2
我正在处理以下无效的查询:
SELECT req1.ID_container, req2.Number_of_line, req1.agreement_yes, req3.agreement_no
FROM
(select t_ID_container,COUNT(ID_line) as agreement_yes FROM my_table WHERE agreement='Yes' GROUP BY ID_container) as req1
INNER JOIN
(select t_ID_container,COUNT(ID_line) as Number_of_line FROM my_table GROUP BY ID_container) as req2
INNER JOIN
(select t_ID_container,COUNT(ID_line) as agreement_no FROM my_table WHERE agreement='No' GROUP BY ID_container) as req3
ON req1.ID_container=req2.ID_container=req3.ID_container
有点迷茫,不知道怎么进步
感谢您的帮助!
您可以使用条件聚合通过一个查询来完成。
SELECT ID_container,
count(*) as number_of_line,
count(case when agreement='Yes' then 1 end) as number_of_yes,
count(case when agreement='No' then 1 end) as number_of_no
FROM my_table
GROUP BY ID_container
我的 Sqlite 数据库中有以下 table :
- ID_container : A5, A5, E12, E12, E12
- ID_line : A5_1, A5_2, E12_1, E12_2, E12_3
- 同意:是,是,否,是,否
在我看来,查询涉及 3 种情况:
- 它计算每个ID_container 的行数
- 它计算每行链接到 ID_container、 的 "yes" 的数量
- 它计算每行 "no" 的数量 ID_container,
预期结果是:
- ID_container : A5, E12
- Number_of_line : 2, 3
- Number_of_yes : 2, 1
- Number_of_no : 0, 2
我正在处理以下无效的查询:
SELECT req1.ID_container, req2.Number_of_line, req1.agreement_yes, req3.agreement_no
FROM
(select t_ID_container,COUNT(ID_line) as agreement_yes FROM my_table WHERE agreement='Yes' GROUP BY ID_container) as req1
INNER JOIN
(select t_ID_container,COUNT(ID_line) as Number_of_line FROM my_table GROUP BY ID_container) as req2
INNER JOIN
(select t_ID_container,COUNT(ID_line) as agreement_no FROM my_table WHERE agreement='No' GROUP BY ID_container) as req3
ON req1.ID_container=req2.ID_container=req3.ID_container
有点迷茫,不知道怎么进步
感谢您的帮助!
您可以使用条件聚合通过一个查询来完成。
SELECT ID_container,
count(*) as number_of_line,
count(case when agreement='Yes' then 1 end) as number_of_yes,
count(case when agreement='No' then 1 end) as number_of_no
FROM my_table
GROUP BY ID_container