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

标签 mysql sql sql-server categorical-data

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

| id |is_manager|manager_id| name |no_of_items| revenue | | 1 | 1 | 0 | Manager1 | 621 | 833 | | 2 | 1 | 0 | Manager2 | 458 | 627 | | 3 | 1 | 0 | Manager3 | 872 | 1027 | ... | 8 | 0 | 1 | Member1 | 1258 | 1582 | | 9 | 0 | 2 | Member2 | 5340 | 8827 | | 10 | 0 | 3 | Member3 | 3259 | 5124 |

所有经理及其各自的成员都在上面的 View 表中。 Member1在Manager1下,Member2在Manager2下,以此类推,但实际数据是随机排列的。我还有一个 View 表 managers我只过滤了经理。我尝试使用以下查询获取每个团队经理的总数:
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| name |total_items| total_revenue | | 1 | 1 | 0 | Manager1 | 1879 | 2415 | | 2 | 1 | 0 | Manager2 | 5798 | 9454 | | 3 | 1 | 0 | Manager3 | 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/

相关文章:

sql - 查找一个表中不存在于另一表中的记录

java - 我如何在java查询循环中打印 "resultList"并使用javascript打印出来?

mysql - 错误 1093 : MySQL can’t specify target table for update in FROM clause

sql-server - 使用 ALTER TABLE ...WITH CHECK CHECK CONSTRAINT 修复损坏的外键

c# - Entity Framework 更新操作 - 为什么首先更新子记录?

php - 用于覆盖表前缀的 Joomla 插件

MySQL 工作台 : how do I set up "ON UPDATE" and CURRENT_TIMESTAMP?

java - Sun JDBC ODBC 驱动程序或 MSSQL JDBC 驱动程序

php - 时事通讯服务的数据库架构(用php)

java - UTC 或时区时间戳的 SQL 标准