【问题标题】:Calculating Total of the row and finding average using MySQL使用 MySQL 计算行的总数并求平均值
【发布时间】:2017-03-14 11:15:39
【问题描述】:

我有两个表 App 和 Store

  • Grouped :这是分组的应用程序的计数,即 HasGroup =1
  • NonGrouped : 它是未分组的应用程序的计数,即 HasGroup = 0
  • 分组 (%) : 分组的应用程序百分比,即 HasGroup =1
  • NonGrouped (%) : 未分组的应用程序百分比,即 HasGroup = 0
  • AverageNonGrouped (%) : 它是分组应用程序的平均值,即(Invidual NonGrouped(%) / total NonGrouped(%))*100。例如,对于 ABC,它是 (75/ 165)*100 = 45.45,同样对于 XYZ,它是 (50/ 165)*100 = 30.30。这里165 是75+50+40 的总和

我的查询如下所示

SELECT 
AppName, 
SUM( CASE HasGroup  WHEN 1 THEN 1 ELSE 0 END ) AS Grouped,
SUM( CASE HasGroup WHEN 0 THEN 1 ELSE 0 END ) AS NonGrouped,
ROUND(((SUM( CASE HasGroup  WHEN 1 THEN 1 ELSE 0 END ) / 
    (SUM( CASE HasGroup  WHEN 0 THEN 1 ELSE 0 END ) + 
        SUM( CASE HasGroup WHEN 1 THEN 1 ELSE 0 END )))*100), 2) AS GroupedPercentage,
ROUND(((SUM( CASE HasGroup  WHEN 0 THEN 1 ELSE 0 END ) / 
    (SUM( CASE HasGroup  WHEN 0 THEN 1 ELSE 0 END ) + 
        SUM( CASE HasGroup WHEN 1 THEN 1 ELSE 0 END )))*100), 2) AS NonGroupedPercentage
FROM
    Apps
    INNER JOIN Store
        ON (Apps.Store = Store.Store) 
        AND AppName !='' GROUP BY AppName 

我能够找到除 AverageNonGrouped (%) 以外的列,因为我不知道如何获得总的 NonGrouped(%),谁能帮我解决这个问题

【问题讨论】:

  • 如何计算“总分组(%)”?
  • @DanIonescu 这就是我被卡住的地方!!!
  • 您在示例中使用了“165”,您如何达到 165? ((75/ 165)*100 = 45.45)
  • @DanIonescu 165 是75+50+40 的总和
  • 但是你也说公式是:“(Invidual Grouped(%) / total Grouped(%))*100”,第75、50、40列代表“未分组”你的桌子,你说“(个人分组(%)/总非分组(%))* 100”?

标签: mysql count average


【解决方案1】:

这是一个很大的查询,但它确实有效(我已经在本地数据集上进行了测试)

SELECT 
    AppName, 
    SUM( CASE HasGroup  WHEN 1 THEN 1 ELSE 0 END ) AS Grouped,
    SUM( CASE HasGroup WHEN 0 THEN 1 ELSE 0 END ) AS NonGrouped,
    ROUND(((SUM( CASE HasGroup  WHEN 1 THEN 1 ELSE 0 END ) / 
    (SUM( CASE HasGroup  WHEN 0 THEN 1 ELSE 0 END ) + 
        SUM( CASE HasGroup WHEN 1 THEN 1 ELSE 0 END )))*100), 2) AS GroupedPercentage,
    ROUND(((SUM( CASE HasGroup  WHEN 0 THEN 1 ELSE 0 END ) / 
    (SUM( CASE HasGroup  WHEN 0 THEN 1 ELSE 0 END ) + 
        SUM( CASE HasGroup WHEN 1 THEN 1 ELSE 0 END )))*100), 2) AS NonGroupedPercentage,

    ROUND(((SUM( CASE HasGroup  WHEN 0 THEN 1 ELSE 0 END ) / 
    (SUM( CASE HasGroup  WHEN 0 THEN 1 ELSE 0 END ) + 
        SUM( CASE HasGroup WHEN 1 THEN 1 ELSE 0 END )))*100), 2) / 

    (SELECT SUM(NonGroupedPercentage)
    FROM (
    SELECT 
        ROUND(((SUM( CASE HasGroup  WHEN 0 THEN 1 ELSE 0 END ) / 
            (SUM( CASE HasGroup  WHEN 0 THEN 1 ELSE 0 END ) + 
                SUM( CASE HasGroup WHEN 1 THEN 1 ELSE 0 END )))*100), 2) AS NonGroupedPercentage
    FROM
        apps
    INNER JOIN store
            ON (apps.Store = store.Store) 
            AND AppName !='' 
    GROUP BY AppName 
    ) AS total) *100  AS AverageNonGroupedPercentage
FROM
    apps
INNER JOIN store
    ON (apps.Store = store.Store) 
    AND AppName !='' 
GROUP BY AppName 

【讨论】:

    猜你喜欢
    • 2020-10-02
    • 2016-11-14
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2023-02-05
    • 2018-10-09
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多