【发布时间】:2017-11-12 16:55:17
【问题描述】:
在我当前的查询中:
SELECT COUNT(WC.ID) AS "Regions"
FROM WHOLE_FEATURES_PDB_CHAINS AS WC
;
我COUNT(WC.ID) AS "Regions" 。
但是,我们有多个区域,WC.Type 可以是1,2,3,4。我需要将每种类型的出现计数为COUNT(WC.ID) AS "Region_1"、COUNT(WC.ID) AS "Region_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;
【问题讨论】:
-
使用计数(WC.type = 1 然后 1 结束的情况)作为 region_1,类似地重复另一列。
-
谢谢@FahadAjun,这行得通...:D
-
我可以将其发布为答案吗?
-
当然,我已经在想你错过了名声:D