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

使用GROUP BY选择多个(非聚合函数)列

夏飞鹏
2023-03-14
问题内容

我试图从一个列中选择最大值,同时按具有多个重复值的另一个非唯一id列进行分组。原始数据库如下所示:

mukey    | comppct_r | name | type
65789    | 20        | a    | 7n
65789    | 15        | b    | 8m
65789    | 1         | c    | 1o
65790    | 10        | a    | 7n
65790    | 26        | b    | 8m
65790    | 5         | c    | 1o
...

使用以下方法可以很好地工作:

SELECT c.mukey, Max(c.comppct_r) AS ComponentPercent
FROM c
GROUP BY c.mukey;

它返回一个像这样的表:

mukey    | ComponentPercent
65789    | 20
65790    | 26
65791    | 50
65792    | 90

我希望能够在不影响GROUP BY函数的情况下添加其他列,以将诸如name和type之类的列包括到输出表中,例如:

mukey    | comppct_r | name | type
65789    | 20        | a    | 7n
65790    | 26        | b    | 8m
65791    | 50        | c    | 7n
65792    | 90        | d    | 7n

但是它总是输出一个错误,说我需要在select语句中使用聚合函数。我应该怎么做呢?


问题答案:

您遇到了每组最多的问题。这是可能的解决方案之一:

select c.mukey, c.comppct_r, c.name, c.type
from c yt
inner join(
    select c.mukey, max(c.comppct_r) comppct_r
    from c
    group by c.mukey
) ss on c.mukey = ss.mukey and c.comppct_r= ss.comppct_r

另一种可能的方法,相同的输出:

select c1.*
from c c1
left outer join c c2
on (c1.mukey = c2.mukey and c1.comppct_r < c2.comppct_r)
where c2.mukey is null;

关于此主题,这里有一个全面而解释性的答案:SQL仅选择列上具有最大值的行



 类似资料:
  • 文档显示了如何使用以输出列名为键的dict一次对groupby对象应用多个函数: 但是,这只对Series groupby对象有效。并且当类似地将dict传递给groupby数据帧时,它希望键是将应用该函数的列名。 我想做的是对几个列应用多个函数(但某些列将被多次操作)。此外,一些函数将依赖于groupby对象中的其他列(如sumif函数)。我当前的解决方案是逐列执行,并执行与上面的代码类似的操作

  • 问题内容: 如何以方便的方式选择表中的所有列和聚合函数? 也就是说,我有一个包含100列的表格,我想发送以下内容 谢谢! 问题答案: 要从表中选择所有列,请执行以下操作: 要从表中选择一个最大值是 两者结合: 如果要在结果行中省略column44并且仅具有maxcol44,则必须列出这些列:

  • 问题内容: 我有一个包含多个包含整数(a1,a2,a3等)的字段的postgresql表。 我想一次跨多个列运行汇总函数(均值,标准差等)。(其中一些可能具有合理数量的空值,因此我不想只生成列平均值然后再对它们求平均值)。 我可以得到一组整数 但是我然后无法获取聚合函数以将此作为输入。 谁能给我任何有关如何使它工作的提示? 问题答案: 使用子查询,您可以使用所有行: 您还可以对行进行分组,例如:

  • 问题内容: 我正在尝试熊猫的分组依据功能,特别是 由于gb有50个组,因此结果非常混乱,我只想探索前5个组的结果。 我找到了如何使用或选择单个组的方法(如何通过key访问datagroup的pandasgroup ),但没有找到直接选择多个组的方法。我能做的最好的事情是: 有没有更直接的方法? 问题答案: 你可以做类似的事情 虽然,我会采取不同的方法。您可以使用该对象快速获取组: 现在,您可以像字

  • 问题内容: 我在#temp表中具有以下数据: 我想做以下操作,即 一行将在两列上加法,即 另一行将在三列上减法加法,即 我曾尝试在SQL Server中使用case语句。 以下是所需的输出 哪里& 我曾尝试使用SQL SERVER Case语句,但未获得正确的输出 问题答案: 我看到至少有两种方法可以得到这些结果。分组或枢纽 在下面的示例中,显示了2种方法。 请注意,使用的是SUM(VALUE)而

  • 问题内容: 我有三个表: 我正在尝试创建一个视图,以便获得table的所有字段,where中的项目计数以及where中所有标签的文本数组。如果我们有: 结果应返回: 这是我到目前为止所拥有的: 这些是我得到的结果(请注意,这是不正确的): 将始终是标签的数量,而不是不同的计数值。我尝试重新排序/修改和子句,它们返回不同的结果,但不是我想要的结果。我认为我在使用该功能时遇到了麻烦,但是我不确定是否是