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

标签 mysql sql group-by hive

我有以下查询,我无法为其构建适当的图 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/

相关文章:

mysql - 如何将 JSON 元素放入 UITextView 中?

mysql - 为每个艺术家创建计数列或在查询中获取计数(计数关注者)

php - 获取特定日期的 SQL 数据

SQL Server 更新分组依据

mysql - 连接两个表文件夹和图像

mysql - 如何在 MySQL 中可靠地删除和创建数据库和用户

mysql - 使用不同和/或分组依据来过滤选择

java - Hibernate...如何进行数据库/SQL 查询?

c# - 执行 LINQ 连接,然后分组,然后对两个不同的列求和

php - php中使用表单提交更新表记录