【问题标题】:Query to compute unspecified values in "Other" category查询以计算“其他”类别中的未指定值
【发布时间】:2021-01-30 01:35:27
【问题描述】:

我们试图解决的问题在此使用一个简单的(并且故意亚规范化的)表来解释。

示例架构和数据

create table expense_profile
(
  id  INT UNSIGNED AUTO_INCREMENT,
  name  VARCHAR(10),
  category  VARCHAR(16),
  percentage DECIMAL(15,2),
  
  PRIMARY KEY(id)
);  

INSERT INTO expense_profile(name, category, percentage)
VALUES('Alice', 'Housing', 15), ('Alice', 'Transportation', 5),
('Alice', 'Food', 25), ('Alice', 'Utilities', 5),
('Alice', 'Healthcare', 5), ('Alice', 'Personal', 3),
('Bob', 'Transportation', 7), ('Bob', 'Food', 18),
('Bob', 'Healthcare', 8), ('Bob', 'Personal', 20);

在这张表中,我们占了 Alice 支出的 58% 和 Bob 支出的 53%。其中暗示爱丽丝 42% 的开支和鲍勃 47% 的开支属于“其他”类别。


Q)是否有一个查询可以让我们为指定用户列出所有类别,包括“其他”类别?


例如,我们希望 Bob 得到以下输出:

+------+----------------+------------+
| name | category       | percentage |
+------+----------------+------------+
| Bob  | Transportation |       7.00 |
| Bob  | Food           |      18.00 |
| Bob  | Healthcare     |       8.00 |
| Bob  | Personal       |      20.00 |
| Bob  | Other          |      47.00 |
+------+----------------+------------+

【问题讨论】:

  • 这看起来像是一道作业题。请发布您的努力,以便我们可以帮助您在查询中遇到问题。一种解决方案涉及带有 UNION 的基本 SELECT。

标签: mysql mariadb


【解决方案1】:

这个怎么样?

(SELECT name, category, percentage FROM expense_profile GROUP BY name , category ) 
 union 
(SELECT name,'Other',100-sum(percentage) AS percentage FROM expense_profile GROUP BY name HAVING percentage>0) 
ORDER BY name, category='Other',category;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多