我有以下查询,我无法构建适当的图块。 不过这是我的问题。
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”,其中flg是SIU,而004的“c”属于005“c”,其标志是SIU。 所以百分比应该是100%,因为004的两个patid在其他行中都是SIU。
类似于003,有1行
003 c NULL
此处百分比为100%,因为003 patid的“c”属于005,其中有SIU标志,因此003为100%
我们不会计算001和005,因为他们已经与SIU一起吃了。
sqlfiddle的链接 http://www.sqlfiddle.com/#!9/fbd32/6/0
答案 0 :(得分:1)
所以你的最终查询应该是(工作,测试):
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`
答案 1 :(得分:0)
您可以尝试以下查询:
从表格中选择100 / count(pat id),其中flg<>' SIU'分组由prv