gpt4 book ai didi

mysql - SQL查询获取某些行的小计

转载 作者:行者123 更新时间:2023-11-29 02:12:42 25 4
gpt4 key购买 nike

如果我想获得每个经理(包括他的团队)的总项目和总收入,SQL 查询脚本是什么?
假设我有这个表items_revenue,列为:

| id |is_manager|manager_id|名称 |no_of_items|收入|
| 1 | 1 | 0 |经理1 | 621| 833|
| 2 | 1 | 0 |经理2 | 458 | 627 |
| 3 | 1 | 0 |经理3 |第872章1027 |
...
| 8 | 0 | 1 |成员(member)1 |第 1258 章第 1582 章
| 9 | 0 | 2 |成员(member)2 | 5340 | 8827 |
| 10 | 0 | 3 |成员(member)3 | 3259 | 5124 |

所有经理和他们各自的成员都在上面的 View 表中。 Member1在Manager1下,Member2在Manager2下,依此类推,但真正的数据是随机排列的。我还有一个包含 managers 的 View 表,我只在其中过滤了经理。我尝试通过以下查询获取每个团队经理的总数:
SELECT id, is_manager, manager_id, name, SUM(no_of_items) AS total_items, SUM(revenue) AS total_revenue
FROM items_revenue t
WHERE (SELECT m.id FROM managers m WHERE m.id = t.id)
GROUP BY id HAVING id IN (SELECT m.id FROM managers m);

但是,它只返回每个经理的总数,并没有得到他们成员的总数。

我希望我的查询输出 ff。表:
| id |is_manager|manager_id|名称 |total_items|总收入 |
| 1 | 1 | 0 |经理1 | 1879 年 | 2415 |
| 2 | 1 | 0 |经理2 | 5798 | 9454 |
| 3 | 1 | 0 |经理3 | 4131 | 6151 |

任何想法如何得到这个?任何帮助将不胜感激。谢谢!

最佳答案

您可以使用 CASE 表达式进行聚合,如果 manager_id 为零,则使用 id 形成一个组,否则使用 manager_id。其余逻辑与您已有的相似。

SELECT
CASE WHEN manager_id = 0 THEN id ELSE manager_id END AS manager_id,
MAX(CASE WHEN is_manager=1 THEN name END) AS name,
SUM(no_of_items) AS total_items,
SUM(revenue) AS total_revenue
FROM items_revenue
GROUP BY
CASE WHEN manager_id = 0 THEN id ELSE manager_id END;

enter image description here

Demo

旁注:我在 GROUP BY 子句中使用了一个函数,它不符合 ANSI,因此可能无法在任何地方运行。要解决此问题,我们可以首先子查询您的表以生成有效的经理组。然后,将我上面的答案用于这个中间结果。

关于mysql - SQL查询获取某些行的小计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47525059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com