假设我在数据库中有两列col1
和col2
。第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,因此,我不想要任何一个。
答案 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;
或者我是否误解了这个问题?