mysql (保留)如何在SQL中跨不同类别的用户将所有值除以第一行中的值?

bejyjqdl  于 2022-11-28  发布在  Mysql
关注(0)|答案(3)|浏览(197)

我有下表:
| 日|类别|计数|
| - -|- -|- -|
| 第一天|A级|10个|
| 第一天|B|二十个|
| 第二天|A级|八个|
| 第二天|B| 10个|
| 第三日|A级|六个|
| 第三日|B|五个|
我试图创建一个百分比列,方法是将第三列(Count)中的值除以第二列(Category;在本例中,A和B分别为10和20)。这应输出如下内容:
| 日|类别|计数|百分比|
| - -|- -|- -|- -|
| 第一天|A级|10个|100%的|
| 第一天|B|二十个|100%的|
| 第二天|A级|八个|百分之八十|
| 第二天|B| 10个|百分之五十|
| 第三日|A级|六个|百分之六十|
| 第三日|B|五个|百分之二十五|
我得到的最远的是下面的代码,但我不知道如何按类别划分。

SELECT
        day,
        category,
        count,
        count/(SELECT count FROM table WHERE day = 'D1')*100 AS pct
    FROM 
        table
    ORDER BY 1
)
3bygqnnd

3bygqnnd1#

这与Asgar的查询相同,但删除了不必要的表派生-

SELECT
    `t1`.*,
    ROUND((`t1`.`count` / `t2`.`count`) * 100) `pct`
FROM `table` `t1`
JOIN `table` `t2`
    ON `t1`.`category` = `t2`.`category`
    AND `t2`.`day` = 'D1'
ORDER BY 1, 2;
afdcj2ne

afdcj2ne2#

这应该可以满足您要求:

SELECT
        day,
        category,
        count,
        count/(SELECT count 
                 FROM table as sub 
                   WHERE day = 'D1' 
                   AND sub.category = main.category)*100 AS pct
    FROM 
        table as main

我假设分母总是基于“D1”,并且日类别的组合总是唯一的。

5lwkijsr

5lwkijsr3#

这句话对你来说应该很准确:

SELECT  
main.*,  
ROUND(((main.Count/d2.Count)*100),2) 
FROM
(SELECT *   FROM day_table d1) main
  JOIN day_table d2 ON d2.Category=main.Category AND d2.Day='D1' 
  ORDER BY 
  main.Day, 
  main.Category

相关问题