我有一个包含多个列的数据框:
SightingID, PA1, PA2, Area, PlotID
。
不同的SightingID(与PA1,PA2和区域相关联)具有相同的PlotID。我想从几个条件中为每个PlotID选择一个SightingID(即,一行)(即,获得具有唯一PlotID的DF)。
如果同一个地块有多个SightingID,请按 -
选择SightingID我来了
SELECT SightingID, PA1, PA2, PlotID, MAX(Area) FROM DF GROUP BY PlotID
我获得了具有最高Area值的SightingID的不同PlotID,但我不知道如何合并我的第一个条件。
我知道我应该使用Distinct
功能,但我不知道如何用它来制定条件。如果它有点令人困惑但是如果有人可以帮助我,那就太好了。感谢
答案 0 :(得分:0)
可以使用Group By代替distinct。根据SQL引擎,它甚至可以将查询计划重写为相同。
以下两个查询在语义上是相同的:
SELECT DISTINCT a, b FROM foo;
和
SELECT a, b FROM foo GROUP BY a, b;
但是,您不能使用不同的聚合,因此,如果您尝试获取值的最大值,则需要使用GROUP BY。我不确定你的问题究竟是什么
答案 1 :(得分:0)
它并不完全清楚你想要什么。如果你想选择与最大面积相关的SightingID,但想要PA1 = 0的记录,那么你就是这样做的。
SELECT
case when maxPlotZero.Area is null then
maxPlot.SightingID
else
maxPlotZero.SightingID
end SightingID
FROM
DF
LEFT JOIN
(
SELECT
PlotID,
MAX(Area) Area
FROM
DF
WHERE
PA1=0
GROUP BY
PlotID
) maxPlotZero
ON df.PlotId= maxPlotZero.PlotID
and df.Area= maxPlotZero.Area
LEFT JOIN
(
SELECT
PlotID,
MAX(Area)
FROM
DF
GROUP BY
PlotID
) maxPlot
ON df.PlotId= maxPlot.PlotID
and df.Area= maxPlot.Area