SQL计数具有条件的不同ID
我想做一个查询,在这个查询中,我可以计算给定列中至少有1个真值的ID的数量,并一次对多个列执行此操作 例如,我有这样一个数据库:SQL计数具有条件的不同ID,sql,Sql,我想做一个查询,在这个查询中,我可以计算给定列中至少有1个真值的ID的数量,并一次对多个列执行此操作 例如,我有这样一个数据库: Table1 Name col_1 col_2 A true true A false true B false false C true false C true false Table2 Name ID A 1 B
Table1
Name col_1 col_2
A true true
A false true
B false false
C true false
C true false
Table2
Name ID
A 1
B 2
C 3
我主要想计算有多少ID具有某个列true(结果输出如下所示):
对于单个列,我可以执行以下操作:
SELECT
COUNT(DISTINCT ID, col_1) as col_1_true
FROM table1, table2
WHERE table1.Name = table2.Name
col_1 = true
但我希望从单个查询中获得最终输出中的所有所需计数(因为我的实际数据集有许多列,我希望定期查询),因此如下所示:
SELECT
COUNT(DISTINCT ID, col_1 = true) as col_1_true
COUNT(DISTINCT ID, col_2 = true) as col_2_true
FROM table1, table2
WHERE table1.Name = table2.Name
我尝试了许多方法,大致如下:
SUM(DISTINCT ID, CASE WHEN col_1 = true THEN 1 ELSE 0 END)
引发错误(函数SUM的参数太多),或
它不能提供正确的输出。它的输出是:
Row col_1_true col_2_true
1 1 1
2 0 1
3 0 0
4 1 0
5 1 0
我想我可能必须引入子查询和/或子表,但我不确定如何继续。在tsql中,它类似于:
SELECT
COUNT(DISTINCT
CASE WHEN col_1 = true
THEN table2.ID END)
AS col_1_true,
COUNT(DISTINCT
CASE WHEN col_2 = true
THEN table2.ID END)
AS col_2_true
FROM table1, table2
WHERE table1.Name = table2.Name
在tsql中,它类似于:
SELECT
COUNT(DISTINCT
CASE WHEN col_1 = true
THEN table2.ID END)
AS col_1_true,
COUNT(DISTINCT
CASE WHEN col_2 = true
THEN table2.ID END)
AS col_2_true
FROM table1, table2
WHERE table1.Name = table2.Name
只要使用正确的语法,您的
SUM(CASE-WHEN)
方法就是正确的。它被称为“条件聚合”。您使用的是哪种dbms?今天的提示:切换到现代的显式JOIN
语法。更易于写入(无错误)、更易于读取(和维护),并且在需要时更易于转换为外部联接。列1和列2数据类型?只要使用正确的语法,您的SUM(CASE-WHEN)
方法是正确的。它被称为“条件聚合”。您使用的是哪种dbms?今天的提示:切换到现代的显式JOIN
语法。更易于写入(无错误),更易于读取(和维护),并且在需要时更易于转换为外部联接。col_1和col_2数据类型?
SELECT
COUNT(DISTINCT
CASE WHEN col_1 = true
THEN table2.ID END)
AS col_1_true,
COUNT(DISTINCT
CASE WHEN col_2 = true
THEN table2.ID END)
AS col_2_true
FROM table1, table2
WHERE table1.Name = table2.Name