问题定义

我有一个SQL查询,看起来像:

SELECT *
    FROM table
    WHERE criteria = 1
    ORDER BY group;


结果

我得到:

group | value | criteria
------------------------
  A   |  0    |   1
  A   |  1    |   1
  B   |  2    |   1
  B   |  3    |   1


预期结果

但是,我想将结果限制为仅第一组(在这种情况下为A)。即

group | value | criteria
------------------------
  A   |  0    |   1
  A   |  1    |   1


我尝试过的

通过...分组

SELECT *
    FROM table
    WHERE criteria = 1
    GROUP BY group;


我可以使用GROUP BY子句聚合组,但这将给我:

group | value
-------------
  A   |  0
  B   |  2


或EACH组的某些汇总功能。但是,我不想汇总行!

子查询

我还可以通过子查询指定组:

SELECT *
  FROM table
 WHERE criteria = 1 AND
       group = (
                       SELECT group
                         FROM table
                        WHERE criteria = 1
                        ORDER BY group ASC
                        LIMIT 1
                   );


这是可行的,但是与往常一样,子查询是混乱的。特别是,这需要两次为WHERE指定我的criteria子句。当然,必须有一种更清洁的方法来执行此操作。

最佳答案

您可以尝试以下查询:

SELECT *
FROM table
WHERE criteria = 1
AND group = (SELECT MIN(group) FROM table)
ORDER BY value;

关于sql - 选择第一组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32144425/

10-13 03:35