我有以下查询,我无法为其构建适当的图 block 。 但这是我的问题。
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的patid“a”属于001“a”,其flag为SIU,而004的“c”属于005“c”,其flag为SIU。 所以百分比应该是100%,因为004的patid在其他行中都是SIU。
同样对于003,有1行
003 c NULL
这里百分比是100%,因为003 patid的“c”属于带有SIU标志的005,所以对于003来说它是100%
我们不会计算001和005,因为他们已经与SIU有patid。
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`
关于mysql - 根据其他行的值计算百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38849289/