草庐IT

每行的MYSQL总和并限制为最好的15

coder 2023-10-12 原文

我有这张 table :扩展

+--------+-----+-----+-----+-----+-  -+-----+-----+
| Name   |  T1 | T2  | T1  | T3  | .. | T19 | T20 |
+--------+-----+-----+-----+-----+-  -+-----+-----+
| john   |  5  | 10  | 50  | 10  | .. | 20  | 8   |
| bill   |  2  | 8   | 11  | 5   | .. | 9   | 55  |
| james  |  30 | 15  | 12  | 40  | .. | 13  | 10  |
| elsie  |  28 | 35  | 20  | 32  | .. | 18  | 1   |
|  ....  |  .. | ..  | ..  | ..  | .. | ..  | ..  |
+--------+-----+-----+-----+-----+-  -+-----+-----+

我想退回这个:

+--------+-------+-----+-----+-----+-----+-  -+-----+-----+
| Name   | TOTAL |  T1 | T2  | T1  | T3  | .. | T19 | T20 |
+--------+-------+-----+-----+-----+-----+-  -+-----+-----+
| bill   |  250  |  2  | 8   | 11  | 5   | .. | 9   | 55  |
| john   |  230  |  5  | 10  | 50  | 10  | .. | 20  | 8   |
| elsie  |  158  |  28 | 35  | 20  | 32  | .. | 18  | 1   |
| james  |  129  |  30 | 15  | 12  | 40  | .. | 13  | 10  |
|  ....  |  .... | ..  | ..  | ..  | ..  | .. | ..  | ..  |
+--------+-------+-----+-----+-----+-----+----+-----+-----+

按总计排序。这个总数是 15 个 Tx 中最好的总和 ...

我现在不知道该怎么做。

该表来自另一个包含大量数据的表的请求(创建 View )。

你能帮帮我吗?

此时,我对所有 Tx 求和,但这不是我想要的......

SELECT `Name`, (T1+T2+ T3+T4+T5+T6+T7+T8+T9+T10+T11+T12+T13+T14+T15+T16+T17+T18+T19+T20) AS TOTAL, T1,T2, T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20
FROM `extended`
ORDER BY TOTAL DESC

最佳答案

如果你想删除最低值,那很简单:

select name,
       (t1 + . . . + t20) -
        least(t1, . . . , t20)
from table;

不幸的是,MySQL 没有nth 函数,因此要获得次少和其他是相当困难的。

如果您将值放在不同的行中,您可以:

select name, sum(t)
from (select en.*,
             if(@name = name, @rn := @rn + 1, @rn := 1) as rn,
             @name := name
      from extended_norm en cross join
           (select @name := '', @rn := 0) const
      order by name, t desc
     ) en
where rn <= 15
group by name;

对于您的数据结构,您可能需要编写一个用户定义的函数来执行您想要的操作。

编辑:

如果你想要 t 的列表,你可以通过两种方式来实现。您可以修改上面的内容以包括数据透视表(这假设您有一个名为 tnumber 的列来标识哪个 t 值):

select name, sum(case when rn <= 15 then t end) as Total,
       max(case when en.tnumber = 1 then t end) as T1,
       max(case when en.tnumber = 2 then t end) as T2,
       . . .
       max(case when en.tnumber = 1 then t end) as T20
from (select en.*,
             if(@name = name, @rn := @rn + 1, @rn := 1) as rn,
             @name := name
      from extended_norm en cross join
           (select @name := '', @rn := 0) const
      order by name, t desc
     ) en
group by name;

否则,采用上述查询并将其连接到非规范化表:

select e.*, tt.total
from extended e join
     (the above query) tt
     on e.name = tt.name;

关于每行的MYSQL总和并限制为最好的15,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18785451/

有关每行的MYSQL总和并限制为最好的15的更多相关文章

  1. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  2. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  3. ruby - 如何使用 ruby​​ mysql2 执行事务 - 2

    我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi

  4. ruby-on-rails - lovdbyless VS 社区引擎……哪个最好? - 2

    随着ruby​​被引入为新的编程救世主,我想知道是否有人基于易用性、运行所需的资源、可用性和易定制性而有偏好。两者有更好的吗? 最佳答案 好吧,任何基于Rails的社交网络应用程序的比较都应该包括insoshi(http://portal.insoshi.com/)。话虽这么说,这三个都非常相似,区别在于实现细节。Lovd和Insoshi都是完整的Rails应用程序;它旨在供您将它们用作入门工具包,并使用您自己的自定义功能对其进行扩展。另一方面,CommunityEngine是一个Rails插件。这意味着您可以更轻松地向现有Rail

  5. ruby-on-rails - 限制 will_paginate 中的页数 - 2

    因此,在使用Sphinx时,搜索限制为1000个结果。但是,如果will_paginate生成的结果分页链接超过1000个,请不要考虑这一点,并提供指向超过1000/per_page的页面的链接。设置最大页数或类似内容的明显方法是什么?干杯。 最佳答案 我认为最好将参数:total_entries提交给方法paginate:@posts=Post.paginate(:page=>params[:page],:per_page=>30,:total_entries=>1000)will_paginate将仅为显示1000个结果所需的页

  6. Ruby Arrays - 求对角线的总和 - 2

    以前没见过这个,但我想知道如何在Ruby中找到二维数组的两条对角线之和。假设您有一个简单的数组,包含3行和3列。array=[1,2,3,4,5,6,7,8,9]我可以通过使用将它分成三个一组array.each_slice(3).to_a现在是[1,2,3],[4,5,6],[7,8,9][1,2,3][4,5,6][7,8,9]在这种情况下,对角线是1+5+9=153+5+7=15所以总和为15+15=30我想我可以做类似的事情diagonal_sum=0foriin0..2forjin0..2diagonal_sum+=array[i][j]endend

  7. arrays - 字符串数组中字符串第一部分的总和 - 2

    我有一个字符串数组,我需要从中提取第一个单词,将它们转换为整数并获得它们的总和。示例:["5Apple","5Orange","15Grapes"]预期输出=>25我的尝试:["5","5","15"].map(&:to_i).sum 最佳答案 我从你的问题中找到了答案。["5Apple","5Orange","15Grapes"].map(&:to_i).sum在数组中,如果存在任何整数可转换值,那么它将自动转换为整数。 关于arrays-字符串数组中字符串第一部分的总和,我们在Sta

  8. ruby-on-rails - 当我通过 rvm 使用 rails3 时,如何在 ubuntu 上安装 mysql2 gem? - 2

    我正在尝试绕过rails配置这个极其复杂的迷宫。到目前为止,我设法在ubuntu上设置了rvm(出于某种原因,ruby在ubuntu存储库中已经过时了)。我设法建立了一个Rails项目。我希望我的测试项目使用mysql而不是mysqlite。当我尝试“rakedb:migrate”时,出现错误:“!!!缺少mysql2gem。将其添加到您的Gemfile:gem'mysql2'”当我尝试“geminstallmysql”时,出现错误,告诉我需要为安装命令提供参数。但是,参数列表很大,我不知道该选择哪些。如何通过在ubuntu上运行的rvm和mysql获取rails3?谢谢。

  9. ruby - 评论限制 - 2

    在ruby​​1.9中,放宽了行结束位置的条件,因此我们现在可以用句号开始一行来显示方法调用。当我们混淆了链式和非链式方法,并希望显示下一个非链式方法的开始位置时,这很方便。如果没有这个新功能,我们能做的最好的可能就是使用缩进:method1(args1).method2(args2).method3(args3)method4(args4).method5(args5).method6(args6)或插入一个空行。但这很不方便,因为我们必须注意缩进,同时,不要忘记在每个方法调用之后加上链中最后一个方法调用之后的句点。正因为如此,我制造了很多错误,要么有一个额外的周期,要么有一个缺失的

  10. ruby - 编写一个 ruby​​ 命令行应用程序;最好的方法是做到这一点? - 2

    我有一个正在开发的命令行Ruby应用程序,我想允许它的用户提供将在部分过程中作为过滤器运行的代码。基本上,应用程序是这样做的:读入一些数据如果指定了过滤器,则使用它来过滤数据处理数据我希望过滤过程(第2步)尽可能灵活。我的想法是,用户可以提供一个Ruby文件,该文件设置一个已知常量以指向实现我定义的接口(interface)的对象,例如:#user'sfilterclassMyFilterdefdo_filter(array_to_filter)filtered_array=Array.new#domyfilteringonarray_to_filterfiltered_arrayen

随机推荐