SQL查询分组参数最大值

时间:2010-12-17 16:58:55

标签: sql parameters group-by max

假设我在数据库中有两列col1col2。第2列是时间,第1列是什么。在我的查询中,我想要执行以下操作:

我想从我的表中SELECT *并按col1对结果进行分组。但是,我只想要那些对于分组col1没有col2值高于某个值的条目。这意味着,我只想要那些col2不超过某个值的col1-s。 例如,如果我有三行,如下所示:

ROW1: col1 = val1, col2 = 3
ROW2: col1 = val1, col2 = 5
ROW3: col1 = val2, col2 = 3
ROW4: col1 = val2, col2 = 4

我不希望它们中的任何一个超过4,然后,因此,我只想要ROW3或ROW4,这对col1来说是无关紧要的并且是分组的。但是在第1行和第2行中,按照col1的值“val1”分组,其中一个col2 DOES超过4,因此,我不想要任何一个。

3 个答案:

答案 0 :(得分:2)

 SELECT col1 FROM table GROUP BY col1 HAVING MAX(col2) <= 4

因为您只想要组中的公共值(col1),所以可以使用GROUP BY。执行GROUP BY(聚合)查询时,可以使用HAVING子句将过滤器应用于聚合数据集。

答案 1 :(得分:1)

我不习惯我明白了(我的英语不好)。 我认为子查询是最好的选择。

注意:此示例适用于mySql ...

SELECT * 
FROM table 
WHERE col1 IN 
  (SELECT col1 FROM table WHERE col2 < 5 GROUP BY col1) 
ORDER BY col1

答案 2 :(得分:1)

CREATE TABLE x (
  t TIME NOT NULL,
  v INT NOT NULL );

INSERT INTO x VALUES
    ('13:14:00', 24),
    ('13:14:00', 27),
    ('13:14:00', 29),
    ('17:12:00', 14),
    ('17:12:00', 20),
    ('17:12:00', 24);

SELECT t, MAX(v) AS mv FROM x
    GROUP BY t
    HAVING mv <= 25;

或者我是否误解了这个问题?