根据其他行的值计算百分比

时间:2016-08-09 11:19:45

标签: mysql sql group-by hive

我有以下查询,我无法构建适当的图块。 不过这是我的问题。

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

2 个答案:

答案 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