我在下面的查询中,我无法框出适当的图块。
但是,这是我的问题。
prv pat id flg
001 a SIU
002 b OVR
003 c NULL
004 a NULL
004 c NULL
001 e SIU
005 c SIU
005 f SIU
预期产量
prv percentage
004 100%
003 100%
002 0%
这里的逻辑是
004 prv有2个patid,即
004 a NULL
004 c NULL
但是004的模式“ a”属于flg是SIU的001“ a”,而004的“ c”属于标志是SIU的005“ c”。
因此百分比应为100%,因为其他行中004的两个部分均为SIU。
类似地,对于003,有1行
003 c NULL
此处的百分比为100%,因为003 patid的“ c”属于具有SIU标志的005,所以对于003,其100%
我们不会计算001和005,因为它们已经与SIU取得联系。
链接到sqlfiddle
http://www.sqlfiddle.com/#!9/fbd32/6/0
最佳答案
因此,您的最终查询应该是(有效,已测试):
SELECT
main.prv,
CONCAT(ROUND(SUM(pat_is_siu)/COUNT(*) * 100),'%') AS percentage
FROM (
SELECT
a.*,
IFNULL((SELECT 1 FROM a AS b WHERE b.`flg` = "SIU" AND b.`pat` = a.`pat` LIMIT 1),0) AS pat_is_siu
FROM a
WHERE IFNULL(a.`flg`, "") != "SIU"
) main
GROUP BY main.`prv`