如何在联合列SQL上使用MIN

如何在联合列SQL上使用MIN,sql,postgresql,count,union,min,Sql,Postgresql,Count,Union,Min,我在sql中使用MIN函数时遇到问题。我想从我的count函数中得到所有行的最小值列表 这是我的密码: SELECT land, MIN(count) as lowest FROM ( SELECT temp.land, count(*) FROM ( SELECT grans.land FROM Grans UNION ALL SELECT grans.aland FROM Grans ) as temp GROU

我在sql中使用MIN函数时遇到问题。我想从我的count函数中得到所有行的最小值列表

这是我的密码:

SELECT land, MIN(count) as lowest 
FROM 
 (
   SELECT temp.land, count(*) 
   FROM 
    (
      SELECT grans.land FROM Grans
      UNION ALL
      SELECT grans.aland FROM Grans
    ) as temp
   GROUP BY land
   ORDER BY land
 )  as subQuery
GROUP BY land
ORDER BY land

目前,我只得到一个表,列出了土地和土地计数,尽管土地计数已重命名为最低值。

如果您只需要最小值,请删除group by,因为如果您将group by放入,它将返回您在子查询中得到的所有土地计数,因为在count中,它已经成为一个组,这是不同的

SELECT * 
FROM 
 (
   SELECT temp.land, count(*) as cnt
   FROM 
    (
      SELECT grans.land FROM Grans
      UNION ALL
      SELECT grans.aland FROM Grans
    ) as temp
   GROUP BY land
   ORDER BY land
 )  as subQuery

order by cnt asc
Limit 1
另一种方法是

SELECT temp.land, count(*) as cnt
       FROM 
        (
          SELECT grans.land FROM Grans
          UNION ALL
          SELECT grans.aland FROM Grans
        ) as temp
       GROUP BY land
       having cnt in(

    SELECT min(cnt)
        FROM 
         (
           SELECT temp.land, count(*) as cnt
           FROM 
            (
              SELECT grans.land FROM Grans
              UNION ALL
              SELECT grans.aland FROM Grans
            ) as temp
           GROUP BY land
           ORDER BY land
         )  as subQuery
       )
而且它也起作用

select * from
(
 SELECT * ,row_number() over(partition by land order by cnt) as rn 
    FROM 
     (
       SELECT temp.land, count(*) as cnt
       FROM 
        (
          SELECT grans.land FROM Grans
          UNION ALL
          SELECT grans.aland FROM Grans
        ) as temp
       GROUP BY land
       ORDER BY land
     )  as subQuery
 ) t where t.rn=1

我将使用窗口功能:

SELECT land, cnt
FROM (SELECT temp.land, count(*) as cnt,
             MIN(count(*)) OVER () as min_cnt
      FROM (SELECT grans.land FROM Grans
            UNION ALL
            SELECT grans.aland FROM Grans
           ) temp
      GROUP BY land
     ) l
WHERE cnt = min_cnt;

好吧,我想我明白你的意思,但问题是我确实想要一张表,上面有陆地上所有的物体,但只有那些最小值的……没有问题,把这个放在哪里condition@Sara回答编辑,如果是mysql,然后使用限制它和秩序,你会得到最小的土地价值,它会越来越好,至少。现在我得到了错误消息:LIMIT的参数必须是bigint类型,而不是boolean类型第15行:LIMIT cnt=1@Sara请问您的数据库管理系统名称?您使用的是什么关系数据库管理系统?请相应地标记您的问题(如果您的RDBMS支持窗口功能,这很容易解决)。我强烈建议您输入已完成的示例数据,站点就是您希望从该示例数据得到的结果。