2010-12-17 109 views
2

比方說,我在數據庫中有兩列,分別爲col1col2。第2列是時間,第1列是一些東西。在我的查詢中,我想要執行以下操作:SQL查詢分組參數最大值

我想從我的表中將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超過4,因此我不想要其中的任何一個。

回答

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

因爲您只需要組中的公共值(col1),所以可以使用GROUP BY。當您執行GROUP BY(聚合)查詢時,可以使用HAVING子句將過濾器應用於聚合數據集。

+0

完美!謝謝。 – arik 2010-12-17 17:48:11

1

我沒有用我明白了(我的英文不好)。 我認爲子查詢是最好的選擇。

注:這個例子應該使用MySQL的...

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

注意:除非您不知道預期會發生什麼,否則「select *」絕不是最好的選擇(動態表的字段不是很常見......) – 2010-12-17 17:27:11

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; 

還是我誤解了問題?