SQLite 删除组中的关系
SQLite removes ties in group by
我预计以下内容会产生超过 3 行,因为每个 a.[Species] 中都有 min(a.[Sepal.Width]) 的关系,
然而只有 3 行是 returned:
sqldf(' select a.[Species], min( a.[Petal.Width]) from iris a group by a.[Species] ')
Species min( a.[Petal.Width])
1 setosa 0.1
2 versicolor 1.0
3 virginica 1.4
1:这是 SQLite 的正常行为吗?
2:如何设计一个 select 字符串也 return 领带?
(最好尽可能接近原始搜索字符串)
编辑:我现在明白我的困惑源于习惯使用 SAS proc sql,这将 return 所有匹配的行。我现在了解到,这确实是 SAS proc SQL 所特有的,而不是其他 SQL 化身所期望的。和我一样有 SAS 引起的困惑的人将从这个阐明 SAS 行为的答案中受益:
我怀疑这就是你想要的:
select i.*
from iris i
where i.sepal_width = (select max(i2.sepal_width)
from iris i2
where i2.species = i.species
);
我会这样做:
sqldf::sqldf('SELECT b.[Species], b.[Petal.Width] FROM iris b JOIN
(SELECT [Species], MIN( [Petal.Width]) AS [Petal.Width]
FROM iris GROUP BY [Species]) a
USING ([Species],[Petal.Width])')
我预计以下内容会产生超过 3 行,因为每个 a.[Species] 中都有 min(a.[Sepal.Width]) 的关系, 然而只有 3 行是 returned:
sqldf(' select a.[Species], min( a.[Petal.Width]) from iris a group by a.[Species] ')
Species min( a.[Petal.Width])
1 setosa 0.1
2 versicolor 1.0
3 virginica 1.4
1:这是 SQLite 的正常行为吗?
2:如何设计一个 select 字符串也 return 领带? (最好尽可能接近原始搜索字符串)
编辑:我现在明白我的困惑源于习惯使用 SAS proc sql,这将 return 所有匹配的行。我现在了解到,这确实是 SAS proc SQL 所特有的,而不是其他 SQL 化身所期望的。和我一样有 SAS 引起的困惑的人将从这个阐明 SAS 行为的答案中受益:
我怀疑这就是你想要的:
select i.*
from iris i
where i.sepal_width = (select max(i2.sepal_width)
from iris i2
where i2.species = i.species
);
我会这样做:
sqldf::sqldf('SELECT b.[Species], b.[Petal.Width] FROM iris b JOIN
(SELECT [Species], MIN( [Petal.Width]) AS [Petal.Width]
FROM iris GROUP BY [Species]) a
USING ([Species],[Petal.Width])')