微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在条件持续的情况下在Mysql中选择行

如何解决如何在条件持续的情况下在Mysql中选择行

| 我有这样的事情:
 Name.....Value
 A...........10 
 B............9
 C............8
含义是,这些值按降序排列。我需要创建一个新表,该表将包含占总值60%的值。因此,这可能是伪代码
set Total = sum(value) 
set counter = 0 
foreach line from table OriginalTable do: 
counter = counter + value 
if counter > 0.6*Total then break
else insert line into FinalTable
end
如您所见,我在这里解析sql行。我知道可以使用处理程序来完成此操作,但是我无法使其正常工作。因此,任何使用处理程序或其他创意的解决方案都是不错的选择。 还应该在合理的时间复杂度下-解决方案,如何选择总计为总值60%的值 可以,但是它慢得像地狱:( 谢谢!!!!     

解决方法

        您可能需要使用
lead()
lag()
窗口函数,可能需要使用递归查询将行合并在一起。请参阅以下相关问题: 如果剧集直接连续或重叠,则合并DATE行 如果您使用的是MySQL,则可以使用以下方法来解决缺少窗口功能的问题: MySQL查询问题     ,        我不知道SQL Server(我假设您正在使用)支持哪些分析功能;对于Oracle,您可以使用类似以下的命令:
select v.*,cumulative/overall percent_current,previous_cumulative/overall percent_previous from (
  select 
    id,name,value,cumulative,lag(cumulative) over (order by id) as previous_cumulative,overall
  from (
    select 
      id,sum(value) over (order by id) as cumulative,(select sum(value) from mytab) overall
    from mytab
    order by id) 
) v
说明: -sum(value)over ...计算总和的运行总计 -lag()为您提供上一行的值 -然后可以将它们组合起来以找到第一行,其中percent_current> 0.6和percent_previous <0.6     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。