我有一些数据选择。示例显示在 SQL Fiddle
中我想为每个名字返回最高的myValue。
NAME MYVALUE
A1 22
A2 22
A3 21
A4 36
A6 12
A9 5
有3行名为A6,我只想要返回最高值的行。
答案 0 :(得分:1)
SELECT NAME,
max(MYVALUE)
FROM TABLE t
GROUP BY NAME
<强> SQL Fiddle 强>
答案 1 :(得分:1)
我发现analytic functions是实现这些结果的好方法。在你的情况下,这意味着:
SELECT
name
, MAX(myvalue) OVER (PARTITION BY name) AS max_name_value
FROM mytable;
分析查询IMO比单独使用GROUP BY
提供更多灵活性。我链接的文章提供了以下示例:
我们希望看到所有部门(有员工)的列表,其中包含该部门的平均工资。以下两个查询给出 同样的结果,一个,传统的,一个没有使用 通过...分组。第二个分析查询可以更容易地扩展到 返回其他信息,例如a处的聚合 不同的分组水平。
select d.dname , avg(e.sal) from dept d natural join emp e group by d.dname
使用分析功能:
select distinct d.dname , avg(e.sal) over (partition by d.dname) Average_Salary_in_Dept from dept d natural join emp e
阅读此查询的分析部分,如下所示:&#39;表示每条记录 返回,选择中所有行的工资值的平均值 分区(子集,组)与当前的部门名称相同 记录的部门名称&#39;。
您还可以按多个列进行分区,以显示每个唯一名称和部门组合的最大ID,只需在PARTITION BY
语句中添加更多列名,如下所示:{{1 }}