gpt4 book ai didi

mysql - 非常复杂的查询,不确定是否可行。涉及不添加到运行总和

转载 作者:可可西里 更新时间:2023-11-01 08:06:19 24 4
gpt4 key购买 nike

我有一个非常复杂的 mySQL 查询要运行,但我在思考如何编写它时遇到了麻烦。

基本上我有三个表:

a(aID, name);
b(bID, val);
ab(aID, bID, include)

我想要做的是创建一个查询来创建这样一个表:

c(aID, percentage);

我希望以这种方式(总计/可能)百分比。总计是这样计算的。每次 a 行和 b 行有一个关系并且包括是 1 我想要总计添加 b.val 的值。可能是 b.val 的总和,除非 ab.include = 0

例如:

a:
+-----+
| aID |
+-----|
| 1 |
| 2 |
| 3 |
+-----+

b:
+-----+-----+
| bID | val |
+-----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
+-----+-----+

ab:
+-----+-----+---------+
| aID | bID | include |
+-----+-----+---------+
| 1 | 1 | 1 |
| 1 | 3 | 0 |
| 2 | 1 | 1 |
| 3 | 1 | 1 |
| 3 | 2 | 1 |
| 3 | 3 | 1 |
+-----+-----+---------+

c:
+-----+------------+
| aID | percentage |
+-----+------------+
| 1 | 50 |
| 2 | 33.33 |
| 3 | 100 |
+-----+------------+

目前我有这个:

SELECT a.aID, (SUM(b.val)/(SELECT SUM(val) FROM b))*100 AS percentage
FROM a, ab, b
WHERE a.aID = ab.aID AND ab.bID = b.bID
GROUP BY a.aID

这给出了 aID 与 bID 相对于权重的百分比,但我想添加其他计算。

这可能吗?

试过了,但没用:

我正要尝试这个:

SELECT a.aID, (SUM(b.val)/(SELECT SUM(val) FROM b,ab WHERE ab.include = 1))*100 AS percentage
FROM a, ab, b
WHERE a.aID = ab.aID AND ab.bID = b.bID AND ab.include = 1
GROUP BY a.aID

最佳答案

试试这个(sqlfiddle):

SELECT ab.aID, SUM(b.val*ab.include)/(possible.possible-SUM((1-ab.include)*b.val))*100 AS percentage
FROM ab, b, (SELECT SUM(val) possible FROM b) possible
WHERE ab.bID = b.bID
GROUP BY ab.aID

分子(总计):对我们有关系的所有 b 值求和

分母(可能):从所有 b 值的总和中减去存在关系且包含为 0 的值。

关于mysql - 非常复杂的查询,不确定是否可行。涉及不添加到运行总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16314300/

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