如图:求前n条数据,这n条数据的产量之和,占总产量的60%
(注意要按产品排序后的前n条数据)
![](https://profile-avatar.csdnimg.cn/default.jpg!4)
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
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 metadata提取的PDF元数据,如何转换为一个Excel
- ¥15 关于arduino编程toCharArray()函数的使用
- ¥100 vc++混合CEF采用CLR方式编译报错
- ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
- ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
- ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
- ¥50 如何openEuler 22.03上安装配置drbd
- ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
- ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
- ¥15 Windows11, backspace, enter, space键失灵