当前位置: 首页 > 面试题库 >

如何重新计算GROUP上的字段

魏成济
2023-03-14
问题内容

我有一张桌子

f1|f2|fk
1 | 0|100
1 | 1|200
1 | 2|300
1 | 3|400
2 | 0|300
2 | 1|400
2 | 2|500

(f1,f2)PK在哪里,fk是外键。fk的值并不多,大约20。f2永远不会大于3。但是,有很多(f1,f2)对。(f1,fk)UNIQUE

现在,假设我们正在将100和200映射到A,将300和400映射到B,将500映射到C-
这个映射是给定的。我们想(f1_new,fk_mapped)留下来UNIQUE。到目前为止,这大致可以通过以下方式解决

INSERT INTO mapped (f1_new,f2_new,fk_new)
SELECT f1, MIN(f2), CASE fk WHEN 100 THEN A WHEN 200 THEN A END AS fk
FROM origin
GROUP BY f1, fk

现在,问题在于我们需要在映射表中保留f2值0、1、2,因此这是期望的结果:

f1_new|f2_new|fk_mapped
1     | 0    |A
1     | 1    |B
2     | 0    |B
2     | 1    |C

我真的很想将其保留在MySQL中。


问题答案:

我认为应该这样做:

INSERT INTO mapped (f1_new, f2_new, fk_new)
SELECT f1_new, f2_new, fk_new from (
    SELECT f1_new, @f2 := if(f1_new = @prev_f1, @f2+1, 0) f2_new, fk_new, @prev_f1 := f1_new
    FROM (select f1 AS f1_new, CASE WHEN fk IN (100, 200) THEN 'A'
                                    WHEN fk in (300, 400) THEN 'B'
                                    WHEN fk = 500 THEN 'C'
                               END AS fk_new
          FROM origin
          GROUP BY f1_new, fk_new
          ORDER BY f1_new, fk_new) new,
         (SELECT @f2 := NULL, @prev_f1 := NULL) vars
    ) x

小提琴



 类似资料:
  • 问题内容: 我知道这样的事实,当我创建JComponent的实例时,它具有自己的首选大小。现在,我们假设我手动设置了JComponent的PreferredSize,尺寸为0 x0。我希望该Component“重置”其自己的preferredSize。我怎么做? 问题答案: 1)将首选大小设置为null可以将组件重置为重新计算其首选大小,就像从未设置过一样。 这可能并不能满足您的要求,具体取决于您

  • 我的代码设置了很多单元格值。最后,在生成excel文件之前,需要评估每个单元格中的公式。对于大多数床单来说,一切都很顺利。 但是,有一个单元格正在引发异常。该单元格正在计算其后面的一系列单元格和其他工作表中的参考单元格的平均值。我猜当第一个单元格试图计算平均值时,后面的单元格尚未计算。 这是那个单元格上的公式 我怀疑是因为单元格int限制了其他工作表中的引用单元格。例如,D2具有以下公式。 所以我

  • 问题内容: 例如,我有这样的数据: 我想使用GROUP BY(其他方法)来汇总我的数据,如下所示: C组是指A&B组 有什么方法可以通过一些简单的方法获得结果吗? 问题答案: 您正在寻找的是。可以通过不同的方式来完成此操作,具体取决于您所使用的数据库: DB2,HANA,Oracle,PostgreSQL 9.5,SQL Server,Sybase SQL Anywhere 在SQL标准中也这样指

  • 我有一个小游戏,当用户按下暂停按钮时,我需要暂停计时器,然后恢复计时器,并在用户按下恢复按钮时继续增加秒数。我研究了很多,我尝试了不同的解决方案,但没有一个对我有效。你能帮我实现这个功能吗?下面是我的代码: 谢谢你读这篇文章。

  • 考虑到用于将图像分为两类的卷积神经网络,我们如何计算权重数: 输入:100x100灰度图像 第1层:具有60个7x7卷积滤波器的卷积层(步长=1,有效填充) 第2层:卷积层,具有100个5x5卷积滤波器(步长=1,有效填充) 第3层:最大池层,将第2层向下采样4倍(例如,从500x500到250x250) 第4层:250个单元的致密层 第5层:200个单元的致密层 第6层:单输出单元 假设每个层都

  • 问题内容: 我正在使用Java绘制一些文本,但是对我来说很难计算字符串的宽度。例如:zheng中国…这个字符串要占用多长时间? 问题答案: 对于单个字符串,您可以获取给定图形字体的度量,然后使用该度量来计算字符串大小。例如: 如果您有更复杂的文本布局要求,例如在给定宽度内流动一段文本,则可以创建一个对象,例如此示例(来自docs):