Mysql 将数据分成前20%的贡献

Mysql 将数据分成前20%的贡献,mysql,sql,Mysql,Sql,这样行吗 我想不出如何找到占总价格20%的部分。这个答案完全基于我对这个问题的理解。不确定您是否正在寻找此结果。请试试这个: SELECT priceEach, CASE WHEN SUM((priceEach/(priceEach) * 100) BETWEEN 19 AND 20 THEN 'yes' ELSE NULL hm FROM orderdetails WHERE hm = 'yes' ORDER BY priceEach DESC; 不!!!你应该 1.按价格分组每个,如按价格

这样行吗


我想不出如何找到占总价格20%的部分。这个答案完全基于我对这个问题的理解。不确定您是否正在寻找此结果。请试试这个:

SELECT priceEach,
CASE WHEN SUM((priceEach/(priceEach) * 100) BETWEEN 19 AND 20 THEN 'yes' ELSE NULL hm
FROM orderdetails
WHERE hm = 'yes'
ORDER BY priceEach DESC;
不!!!你应该 1.按价格分组每个,如按价格分组每个 2.像这样一个接一个地结束

SELECT priceEach,
       CASE WHEN SUM((priceEach/(priceEach) * 100) BETWEEN 19 AND 20 THEN 'yes' ELSE NULL END hm
FROM orderdetails
ORDER BY priceEach DESC
having Count(CASE WHEN SUM((priceEach/(priceEach) * 100) BETWEEN 19 AND 20 THEN 1 ELSE 0 end) = 1;
CASE WHEN SUM((priceEach/(priceEach) * 100) BETWEEN 19 AND 20 THEN 'yes' ELSE NULL end
你的选择将是这样的

SELECT priceEach,
       CASE WHEN SUM((priceEach/(priceEach) * 100) BETWEEN 19 AND 20 THEN 'yes' ELSE NULL END hm
FROM orderdetails
ORDER BY priceEach DESC
having Count(CASE WHEN SUM((priceEach/(priceEach) * 100) BETWEEN 19 AND 20 THEN 1 ELSE 0 end) = 1;
CASE WHEN SUM((priceEach/(priceEach) * 100) BETWEEN 19 AND 20 THEN 'yes' ELSE NULL end
看看这个:- 我希望这就是你想要的。有点长,但值得努力

    SELECT priceEach,
    CASE WHEN SUM((priceEach/(priceEach) * 100) BETWEEN 19 AND 20 THEN 'yes' ELSE NULL end hm
    FROM orderdetails
    WHERE hm = 'yes'
group by priceEach
    ORDER BY priceEach DESC;

在MySQL中,您可以使用变量执行此操作:

Select a.priceEach,  a.perc_priceEach_seg, SUM(b.perc_priceEach_seg) as perc_col
from
(                                
 Select priceEach, ((priceEach* 100)/overall_tot) as perc_priceEach_seg 
 from
 (
 Select priceEach,1 as tag
 from orderdetails
 ) a   
inner join
 (
 Select sum(priceEach) as overall_tot, 1 as tag
 from orderdetails
 ) b
 on a.tag=b.tag  
) a
inner join
(                                
 Select priceEach, ((priceEach* 100)/overall_tot) as perc_priceEach_seg 
 from
 (
 Select priceEach,1 as tag
 from orderdetails
 ) a   
inner join
 (
 Select sum(priceEach) as overall_tot, 1 as tag
 from orderdetails
 ) b
 on a.tag=b.tag  
) b
on
a.priceEach <= b.priceEach
group by a.priceEach,  a.perc_priceEach_seg
having SUM(b.perc_priceEach_seg) between 19 and 20
order by perc_priceEach_seg desc

提供样本数据和预期结果。用您正在使用的数据库标记您的问题。由于多种原因,您的查询无法运行。我正在使用MySQL。数据只是所购买产品的价格列表。理想的结果是前20%贡献的范围。我已经知道最高价格,所以我需要知道当价格按desc顺序排序时,达到20%的贡献时的价格。我想找到最高价格~0.4的百分比贡献,然后再加上第二高价格的百分比贡献,依此类推,直到我达到20%。我想知道哪个价格能让我拿到20%。感谢您的帮助: