Mysql 对同一列的多个类型进行计数

Mysql 对同一列的多个类型进行计数,mysql,sql,select,mariadb,Mysql,Sql,Select,Mariadb,在我当前的查询中: SELECT COUNT(WC.ID) AS "Regions" FROM WHOLE_FEATURES_PDB_CHAINS AS WC ; 我将wc.ID列为区域。 但是,我们有多个WC区域。类型可以是1,2,3,4。我需要将每个类型的出现计数到COUNTWC.ID作为区域_1,COUNTWC.ID作为区域_2。。。取决于WC.Type。 有没有办法在一个查询中解决这个问题?我正在研究MySQL IF,但不知道如何将其集成到count函数中 我需要它在一行中,这里显

在我当前的查询中:

SELECT COUNT(WC.ID) AS "Regions" 
FROM WHOLE_FEATURES_PDB_CHAINS AS WC 
;
我将wc.ID列为区域。 但是,我们有多个WC区域。类型可以是1,2,3,4。我需要将每个类型的出现计数到COUNTWC.ID作为区域_1,COUNTWC.ID作为区域_2。。。取决于WC.Type。 有没有办法在一个查询中解决这个问题?我正在研究MySQL IF,但不知道如何将其集成到count函数中

我需要它在一行中,这里显示的查询被减少,这是一个更大的查询

SELECT COUNT(WC.ID) AS "Region_1" , COUNT(WC.ID) AS "Region_2" ...
如果有人感兴趣,以下是完整的查询:

SELECT PCS.PDB_id, PCS.Chain, PPA.ENSEMBL_start, PPA.ENSEMBL_end, PPA.eValue, PIN.TITLE AS "pdbTitle", COUNT(WC.ID) AS "Regions" 
FROM PDB_Chains AS PCS 
LEFT JOIN WHOLE_FEATURES_PDB_CHAINS AS WC ON WC.PDB_CHAIN_ID = PCS.idPDB_chains, PDB_protein_alignment PPA, PDB_INFOS PIN 
WHERE PCS.idPDB_chains = PPA.idPDB_Chains 
AND PCS.PDB_id = PIN.PDB_ID 
AND PPA.idProteins = (SELECT idProteins from Proteins WHERE ENSEMBL_protein_id = "'+submittedID+'") 
GROUP BY PCS.PDB_id, PCS.Chain ORDER BY PCS.PDB_id;
以下是基于您友好回答的工作解决方案

SELECT PIN.TITLE AS "pdbTitle", COUNT(CASE WHEN WC.STRUCTURAL_FEATURES_ID = 1 then 1 end) AS "PPInterface" , COUNT(CASE WHEN WC.STRUCTURAL_FEATURES_ID = 4 then 1 end) AS "flexibleRegions" 
FROM PDB_Chains AS PCS LEFT JOIN WHOLE_FEATURES_PDB_CHAINS AS WC ON WC.PDB_CHAIN_ID = PCS.idPDB_chains, PDB_protein_alignment PPA, PDB_INFOS PIN 
WHERE PCS.idPDB_chains = PPA.idPDB_Chains 
AND PCS.PDB_id = PIN.PDB_ID 
AND PPA.idProteins = (SELECT idProteins from Proteins WHERE ENSEMBL_protein_id = "ENSP00000256078.4") 
GROUP BY PCS.PDB_id, PCS.Chain ORDER BY PCS.PDB_id;
您可以使用GROUP BY with COUNT获得所需的结果,例如:

SELECT WC.Type, COUNT(WC.ID) AS "Regions" 
FROM WHOLE_FEATURES_PDB_CHAINS AS WC 
GROUP BY WC.Type;
更新

如果要将计数作为每个区域的数据透视列,则可以编写内部选择查询,例如:

SELECT
 (SELECT COUNT(ID) FROM WHOLE_FEATURES_PDB_CHAINS WHERE type = 1) AS "Region_1",
 (SELECT COUNT(ID) FROM WHOLE_FEATURES_PDB_CHAINS WHERE type = 2) AS "Region_2",
other_column
FROM WHOLE_FEATURES_PDB_CHAINS AS WC
WHERE <some condition>;
您可以使用GROUP BY with COUNT获得所需的结果,例如:

SELECT WC.Type, COUNT(WC.ID) AS "Regions" 
FROM WHOLE_FEATURES_PDB_CHAINS AS WC 
GROUP BY WC.Type;
更新

如果要将计数作为每个区域的数据透视列,则可以编写内部选择查询,例如:

SELECT
 (SELECT COUNT(ID) FROM WHOLE_FEATURES_PDB_CHAINS WHERE type = 1) AS "Region_1",
 (SELECT COUNT(ID) FROM WHOLE_FEATURES_PDB_CHAINS WHERE type = 2) AS "Region_2",
other_column
FROM WHOLE_FEATURES_PDB_CHAINS AS WC
WHERE <some condition>;
也许你想做什么就做什么


可以执行您想要的操作。

您可以在聚合函数中使用case-when语句

试试这个


countcase当WC.type=1时,则1以区域_1结束,类似地,对另一列重复此操作

您可以在聚合函数中使用case-when语句

试试这个


countcase当WC.type=1时,则1以区域_1结束,类似地,对另一列重复此操作

谢谢,但是我添加了一个编辑来指定它必须在一行中。如果只是这样的话,你的建议就行了。那么我可以将条件设置为适用于上述子查询的总体子集吗?其中WC.ID=PDB.hasworregionid?我不需要表的完整计数,只需要表中的一个子集,因此需要WHERE…。您不能对整个子集进行条件设置,但可以使用和将上述条件添加到每个查询中。@ElDude是否要在WHERE中使用条件,以便只获得该WC.ID的结果?谢谢,但是我添加了一个编辑来指定它必须在一行中。如果只是这样的话,你的建议就行了。那么我可以将条件设置为适用于上述子查询的总体子集吗?其中WC.ID=PDB.hasworregionid?我不需要表的完整计数,只需要表中的一个子集,因此需要WHERE…。您不能对整个子集进行条件设置,但可以将上述条件添加到带有和的每个查询中。@ElDude您想在WHERE中使用条件,以便只获得该WC.ID的结果吗?当WC.type=1时使用countcase,然后1作为区域_1结束,同样,在另一个专栏中重复。谢谢@FahadAjun,这很有效…:我可以把它作为一个答案吗?当然,我已经认为你错过了名声:当WC.type=1时,DUse countcase然后1结束为region_1,类似地在另一个专栏中重复。谢谢@FahadAjun,这是有效的…:我可以把它作为一个答案吗?当然,我已经认为你错过了名声:DOr,更简洁地说,SUMWC.type=1作为区域_1,因为布尔和为1或0。或者,更简洁地说,SUMWC.type=1作为区域_1,因为布尔和为1或0。