如图:求前n条数据,这n条数据的产量之和,占总产量的60%
(注意要按产品排序后的前n条数据)
sql 语句:对某字段排序后,求占总数60%的前x条数据
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- threenewbee 2020-05-27 16:40关注
太复杂了,拿LINQ写了一个,看帮你转换的SQL
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Q1078172 { class Program { static void Main(string[] args) { DataClasses1DataContext db = new DataClasses1DataContext(); db.Log = Console.Out; var query = (from x in db.Table1s.OrderByDescending(x => x.qnt) let acc = x.qnt + (db.Table1s.Any(y => x.qnt <= y.qnt && x.name != y.name) ? db.Table1s.Where(y => x.qnt <= y.qnt && x.name != y.name).Select(y => y.qnt).Sum() : 0) where acc < db.Table1s.Select(y => y.qnt).Sum() * 60 / 100 select new { acc, x }).OrderBy(x => x.acc); foreach (var item in query) Console.WriteLine(item.x.name + "," + item.x.qnt + ", " + item.acc); } } } hung,100, 100 thai,80, 260 cn,80, 260
对应的sql (表名叫Table1,国家id叫id,国家名称叫name,产量叫qnt)
SELECT [t3].[value] AS [acc], [t3].[id], [t3].[name], [t3].[qnt] FROM ( SELECT [t0].[id], [t0].[name], [t0].[qnt], [t0].[qnt] + ( (CASE WHEN EXISTS( SELECT NULL AS [EMPTY] FROM [dbo].[Table1] AS [t1] WHERE ([t0].[qnt] <= [t1].[qnt]) AND ([t0].[name] <> [t1].[name] ) ) THEN ( SELECT SUM([t2].[qnt]) FROM [dbo].[Table1] AS [t2] WHERE ([t0].[qnt] <= [t2].[qnt]) AND ([t0].[name] <> [t2].[name] ) ) ELSE 0 END)) AS [value] FROM [dbo].[Table1] AS [t0] ) AS [t3] WHERE [t3].[value] < (SELECT SUM([t0].[qnt]) * 60 / 100 FROM [dbo].[Table1] AS [t0]) ORDER BY [t3].[value], [t3].[qnt] DESC
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 机器学习能否像多层线性模型一样处理嵌套数据
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题
- ¥15 matlab不知道怎么改,求解答!!
- ¥15 永磁直线电机的电流环pi调不出来
- ¥15 用stata实现聚类的代码
- ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效