SQL TOP 结果按字段分组

标签 sql ms-access

我遇到了 SQL 查询问题。我有一个包含 145 个站点名称的列表。在每个地点都发现了某些物种。我计算了每个物种在每个地点出现的次数。我想找到在每个地点看到的 5 种最常见的物种。目前我有:

SELECT TOP 5 Count([bird point counts bound query].[Group size]) AS [CountOfGroup size], [bird point counts bound query].site, [bird point counts bound query].Species
FROM [bird point counts bound query]
GROUP BY [bird point counts bound query].site, [bird point counts bound query].Species
ORDER BY Count([bird point counts bound query].[Group size]) DESC;

这仅返回所有站点中最常见的 5 个物种。澄清一下,根据每个站点和 145 个站点的前 5 个结果,结果表应包含 725 条记录。我目前在 Access 工作。

感谢任何帮助,因为 SQL 不是我的强项。

最佳答案

据我所知,您只能使用 Access 中的临时表来完成此操作。

类似的东西?

CREATE TABLE ##SiteSpecies (
  id            int IDENTITY (1,1),
  Site          <whatever>,
  Species       <whatever>,
  Observations  int
)

INSERT INTO ##SiteSpecies
SELECT   [bird point counts bound query].site, [bird point counts bound query].Species, Count([bird point counts bound query].[Group size])
FROM     [bird point counts bound query]
GROUP BY [bird point counts bound query].site, [bird point counts bound query].Species
ORDER BY [bird point counts bound query].site, [bird point counts bound query].Species, Count([bird point counts bound query].[Group size])

SELECT
  results.*
FROM
  ##SiteSpecies        AS results
INNER JOIN
(
  SELECT Site, MIN(id) AS FirstID FROM ##SiteSpecies GROUP BY Site
)
  AS SiteMarkers
    ON  results.Site  = SiteMarkers.Site
    AND results.id   <= SiteMarkers.FirstID + 4

关于SQL TOP 结果按字段分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10574662/

相关文章:

ms-access - db.OpenRecordset 返回的不是记录集;但按照他们所做的查询运行

sql - MySQL查询错误

php - PROPEL - 将 sql 查询传输到 propel

php - 获取两年之间的月份并获取每年所有月份的总和

java - 根据 MS Access 数据库中的月份部分选择行

database - 从 MS-Access 中的两个表中检索超过 250 个字段

mysql - 使空间保持一致

mysql - 导出和导入 mysql 数据库的最佳实践是什么?

ms-access - 用于填充 MS Access 中的超链接列的 SQL

SQL:HAVING 子句