mysql在获取某个字段的列表数据,同时获取这个字段的求和数,用于计算占比,并排序?
例如,表a 结构是:
id | qty |
---|---|
1 | 10 |
2 | 12 |
3 | 15 |
我需要查询出来的数据是 |
id | qty | total_qty | ratio |
---|---|---|---|
1 | 10 | 37 | 0.27 |
2 | 12 | 37 | 0.32 |
3 | 15 | 37 | 0.41 |
语句需要支持按ratio排序。
我能想到的是:
SELECT
id,
qty,
total_qty,
ROUND( qty / total_qty, 2 ) AS ratio
FROM
( SELECT id, qty, ( SELECT sum( qty ) AS total FROM test_a ) AS total_qty FROM test_a ) AS t
ORDER BY
ratio DESC
请教下,是否还有别的写法?
with test_a as
(
select 1 as id,10 as qty
union all
select 2,12
union all
select 3,15
)
select
t.*
,sum(t.qty) over() as total_qty
,round(t.qty *1.0 / sum(t.qty) over(),2) as ratio
from
test_a t
【以下回答由 GPT 生成】
SELECT
id,
qty,
(SELECT SUM(qty) FROM a) AS total_qty,
ROUND(qty / (SELECT SUM(qty) FROM a), 2) AS ratio
FROM
a
ORDER BY
ratio DESC
上述SQL语句可以实现您的需求。以下是解决问题的步骤:
这种写法避免了使用多层子查询,提高了查询性能。