SQL- 来自 Excel 的 countif 通信
SQL- countif correspondence from Excel
我有以下 table,填充了 CODE1 并且 COUNT 具有我希望使用公式获得的值。
它的情况与 excel count if() 基本相同,但我在 SQL.
中需要它
CODE1 COUNT
1 2
1 2
2 3
2 3
2 3
3 2
3 2
谢谢!
您没有指定您的 DBMS,所以这是标准的 SQL(所有现代 DBMS 都可以理解 - 包括 z/OS 或 LUW 的任何最新版本的 DB2):
select code1,
count(*) over (partition by code1) as cnt
from the_table
order by code1;
第一个解决方案:
我认为这个 SQL 将组合 group by 和 having 子句,例如
Select CODE1,count(1) as cnt
from yourTable
group by CODE1
having count(1) > threshold
阈值将是您的标准,高于 SQL 将适用于所有数据,如 MS Access、Oracle 等。
第二种解决方案:
在 case 语句中使用 sum,例如
Select CODE1,sum(case when yourColumn ='anyValue' then 1 else 0 end) as cnt
from yourTable
第二种解决方案不适用于所有数据库。
编辑:
现在我在MYSQL给出解决方案,见SQL Fiddle
我有以下 table,填充了 CODE1 并且 COUNT 具有我希望使用公式获得的值。
它的情况与 excel count if() 基本相同,但我在 SQL.
中需要它CODE1 COUNT
1 2
1 2
2 3
2 3
2 3
3 2
3 2
谢谢!
您没有指定您的 DBMS,所以这是标准的 SQL(所有现代 DBMS 都可以理解 - 包括 z/OS 或 LUW 的任何最新版本的 DB2):
select code1,
count(*) over (partition by code1) as cnt
from the_table
order by code1;
第一个解决方案:
我认为这个 SQL 将组合 group by 和 having 子句,例如
Select CODE1,count(1) as cnt
from yourTable
group by CODE1
having count(1) > threshold
阈值将是您的标准,高于 SQL 将适用于所有数据,如 MS Access、Oracle 等。
第二种解决方案:
在 case 语句中使用 sum,例如
Select CODE1,sum(case when yourColumn ='anyValue' then 1 else 0 end) as cnt
from yourTable
第二种解决方案不适用于所有数据库。
编辑:
现在我在MYSQL给出解决方案,见SQL Fiddle