2017-11-02 11 views
-3

私は、Col2、Col3で昇順、Col4で降順であるデータを含むテーブルを持っています。MySQLは各 "グループ"の最初を見つけます

+------+------+------+------+ 
    | Col1 | Col2 | Col3 | Col4 | 
    +------+------+------+------+ 
    | 11 | a | b | 1 | 
    +------+------+------+------+ 
    | 21 | a | b | 0 | 
    +------+------+------+------+ 
    | 31 | d | c | 0 | 
    +------+------+------+------+ 
    | 41 | a | e | 0 | 
    +------+------+------+------+ 
    | 22 | f | a | 1 | 
    +------+------+------+------+ 
    | 23 | f | a | 0 | 
    +------+------+------+------+ 

私が達成したい結果を唯一の「1を持つものを検索し、重複を持っている人からもあるとしてCol2にとCOL3には重複を持たないデータを取得することです。ですから、例えばテーブルには、次のことです"Col4で。上記の表を使用すると、結果は次のようになります。

+------+------+------+------+ 
    | Col1 | Col2 | Col3 | Col4 | 
    +------+------+------+------+ 
    | 11 | a | b | 1 | 
    +------+------+------+------+ 
    | 31 | d | c | 0 | 
    +------+------+------+------+ 
    | 41 | a | e | 0 | 
    +------+------+------+------+ 
    | 22 | f | a | 1 | 
    +------+------+------+------+ 

これはMySQLで可能ですか?

+0

dbfiddle完全に可能と思われます。 https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-queryを参照してください。 – Strawberry

答えて

3

GROUP BYMIN()MAX()を使用するクエリは、望ましい結果を生成するように見えます。

CREATE TABLE Table1 
    (`Col1` int, `Col2` varchar(1), `Col3` varchar(1), `Col4` int); 

INSERT INTO Table1 
    (`Col1`, `Col2`, `Col3`, `Col4`) 
VALUES 
    (11, 'a', 'b', 1), 
    (21, 'a', 'b', 0), 
    (31, 'd', 'c', 0), 
    (41, 'a', 'e', 0), 
    (22, 'f', 'a', 1), 
    (23, 'f', 'a', 0); 
select min(`Col1`) Col1, `Col2`, `Col3`, max(`Col4`) 
from Table1 
group by `Col2`, `Col3` 
order by `Col2`, `Col3`; 
 
Col1 | Col2 | Col3 | max(`Col4`) 
---: | :--- | :--- | ----------: 
    11 | a | b |   1 
    41 | a | e |   0 
    31 | d | c |   0 
    22 | f | a |   1 

here

関連する問題