如何解决如何使用小计算从现有表创建新的 sql 表
我有一个这样的 SQLite 表:
id | 项目 | 总成本 | sharedppl | 付费 | 第二个 | 第三 |
---|---|---|---|---|---|---|
1 | 午餐 | 150 | 3 | 汤姆 | 杰克 | 哈利 |
2 | 晚餐 | 200 | 2 | 杰克 | 哈利 | |
3 | 饮料 | 75 | 3 | 哈利 | 杰克 | 汤姆 |
我想要一个新的 SQLite 表来显示每个人的份额。它需要进行计算以在人之间分摊每个项目的成本。
项目 | 汤姆 | 杰克 | 哈利 |
---|---|---|---|
午餐 | 50 | 50 | 50 |
晚餐 | 0 | 100 | 100 |
饮料 | 25 | 25 | 25 |
请告知我需要在 sql 上运行什么查询来获取这个新表。
解决方法
一种方法,使用逆透视,然后是透视和聚合:
WITH cte AS (
SELECT item,totalcost,paidby AS person FROM yourTable
UNION ALL
SELECT item,second FROM yourTable
UNION ALL
SELECT item,third FROM yourTable
)
SELECT
item,CASE WHEN COUNT(CASE WHEN person = 'Tom' THEN 1 END) > 0
THEN MAX(totalcost) / COUNT(person) ELSE 0 END AS Tom,CASE WHEN COUNT(CASE WHEN person = 'Jack' THEN 1 END) > 0
THEN MAX(totalcost) / COUNT(person) ELSE 0 END AS Jack,CASE WHEN COUNT(CASE WHEN person = 'Harry' THEN 1 END) > 0
THEN MAX(totalcost) / COUNT(person) ELSE 0 END AS Harry
FROM cte
GROUP BY item,id
ORDER BY id;
旁注:您当前的表格设计未正确规范化。您可以而且应该在此处将其更改为您想要的输出。
,使用 CASE
表达式计算每个人的份额:
SELECT item,CASE WHEN 'Tom' IN (paidby,second,third) THEN 1.0 * totalcost / sharedppl ELSE 0 END AS Tom,CASE WHEN 'Jack' IN (paidby,third) THEN 1.0 * totalcost / sharedppl ELSE 0 END AS Jack,CASE WHEN 'Harry' IN (paidby,third) THEN 1.0 * totalcost / sharedppl ELSE 0 END AS Harry
FROM tablename
参见demo。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。