gpt4 book ai didi

MySQL - 子查询返回多于 1 行

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

首先,这是我尝试操作的表格示例:

##################################
# TABLE_A #
##################################
+----------+----------+----------+
| ID | COLUMN_A | COLUMN_B |
+----------+----------+----------+
| 1 | 24 | 1 |
| 2 | 53 | 1 |
| 3 | 12 | 1 |
| 4 | 87 | 2 |
| 5 | 63 | 2 |
| 6 | 55 | 3 |
| 7 | 39 | 3 |
| 8 | 47 | 3 |
| 9 | 85 | 3 |
+----------+----------+----------+

当column_b有相同的值时,我想计算column_a的每个值的百分比。

例如,当column_b = 1时,24+53+12=89 所以我们会得到如下百分比:

  • 24 : 27%
  • 53 : 60%
  • 12 : 13%

当我使用“WHERE”来指示 column_b 的值时,这是有效的,正如您在这个请求中看到的那样:

SELECT ROUND(
(column_a*100) / (SELECT SUM(column_a)
FROM TABLE_A
WHERE column_b=1)
) AS RESULT
FROM TABLE_A
where column_b=1;

+--------+
| RESULT |
+--------+
| 27 |
| 60 |
| 13 |
+--------+

但是,当我尝试计算 column_b 的每个值的所有百分比时,它仍然不起作用。

我尝试使用“GROUP BY”来执行此操作,但出现错误“子查询返回多于 1 行”:

SELECT ROUND(
(column_a*100) / (SELECT SUM(column_a)
FROM TABLE_A
GROUP BY column_b)
) AS RESULT
FROM TABLE_A;

我明白为什么会出现此错误,因为第二个 SELECT 返回 3 个值,并且无法连续划分这些值。那么,我怎样才能做我想做的事呢?

最佳答案

您可以在子查询中聚合并将其与主表连接起来,如下所示:

select t1.id, t1.column_b, t1.column_a, 100 * t1.column_a / t2.column_a perc
from table_a t1
inner join (
select column_b, sum(column_a) column_a
from table_a
group by column_b
) t2 on t1.column_b = t2.column_b;

关于MySQL - 子查询返回多于 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41430267/

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