我有一个表,其中包含Col2,Col3中升序和Col4中降序的数据。所以示例表如下:
+------+------+------+------+
| 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 |
+------+------+------+------+
我想要完成的结果是获取Col2和Col3中没有重复数据的数据,并且那些具有重复项的数据仅检索Col4中具有“1”的数据。因此,使用上表,结果应为:
+------+------+------+------+
| Col1 | Col2 | Col3 | Col4 |
+------+------+------+------+
| 11 | a | b | 1 |
+------+------+------+------+
| 31 | d | c | 0 |
+------+------+------+------+
| 41 | a | e | 0 |
+------+------+------+------+
| 22 | f | a | 1 |
+------+------+------+------+
这在MySQL中是否可行?
答案 0 :(得分:3)
使用GROUP BY
MIN()
和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
dbfiddle here