gpt4 book ai didi

SQL占总数的百分比

转载 作者:行者123 更新时间:2023-12-01 00:57:47 24 4
gpt4 key购买 nike

嗨,我怎样才能得到每条记录占总数的百分比?
让我们想象一下我有一张 table ,里面有以下内容

ID code Points
1 101 2
2 201 3
3 233 4
4 123 1
ID 1 的百分比是 20%230%所以一个
我怎么得到它?

最佳答案

有几种方法可以得到这个结果。

您基本上需要整个表(或任何子集)中的“总”点,并在每一行上重复。获取百分比是一个简单的算术问题,您使用的表达式取决于数据类型,以及您希望如何格式化。

这是获得指定结果的一种方法(几种可能的方法):

SELECT t.id
, t.code
, t.points
-- , s.tot_points
, ROUND(t.points * 100.0 / s.tot_points,1) AS percentage
FROM onetable t
CROSS
JOIN ( SELECT SUM(r.points) AS tot_points
FROM onetable r
) s
ORDER BY t.id

View 查询 s首先运行,这给出了一行。连接操作将该行与来自 t 的每一行进行匹配。 .这为我们提供了计算百分比所需的值。

获得此结果的另一种方法是在不使用连接操作的情况下使用 SELECT 列表中的子查询来返回总数。

请注意,连接方法可以扩展为获得每个“组”记录的百分比。
id  type    points   %type
-- ---- ------ -----
1 sold 11 22%
2 sold 4 8%
3 sold 25 50%
4 bought 1 50%
5 bought 1 50%
6 sold 10 20%

要获得该结果,我们可以使用相同的查询,但使用 s 的 View 查询。返回总数 GROUP BY r.type ,然后连接操作不是交叉连接,而是基于类型的匹配:
SELECT t.id
, t.type
, t.points
-- , s.tot_points_by_type
, ROUND(t.points * 100.0 / s.tot_points_by_type,1) AS `%type`
FROM onetable t
JOIN ( SELECT r.type
, SUM(r.points) AS tot_points
FROM onetable r
GROUP BY r.type
) s
ON s.type = t.type
ORDER BY t.id

要对子查询执行相同的结果,这将是一个相关的子查询,并且该子查询可能会针对 t 中的每一行执行。 .

这就是为什么我更自然地使用连接操作,而不是 SELECT 列表中的子查询......即使子查询的工作方式相同。 (我们用于更复杂查询的模式,例如为表分配别名、限定所有列引用和格式化 SQL ......这些模式只是回到简单查询中。这些模式的基本原理在简单的查询。)

关于SQL占总数的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26141059/

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