我有一个看起来像这样的mysql表:
1 value1 value2 3534
2 value1 value1 8456
3 value1 value2 3566
4 value1 value3 7345
5 value2 value3 6734
我需要一个查询来选择具有不同列2和3的所有行,例如,我希望此示例的输出如下所示:
1 value1 value2 3534
2 value1 value1 8456
4 value1 value3 7345
5 value2 value3 6734
我发现了一些关于如何操作的样本,但它们都在每个列上单独选择不同。
答案 0 :(得分:27)
最好在上面使用它。
SELECT id, col2, col3, col4
FROM yourtable
GROUP BY col2, col3;
我说的原因是因为使用了CONCAT,我无法获得 this case 的结果。第一个查询返回5行,但CONCAT返回4行,这是INCORRECT。
希望你明白我的意思。
假设表中的列是(id,col2,col3,col4)。
SELECT DISTINCT(CONCAT(col2, col3)) as "dummy column", id, col2, col3, col4
FROM yourtable
GROUP BY CONCAT(col2, col3);
SELECT id, col2, col3, MIN(col4)
FROM yourtable
GROUP BY col2, col3;
答案 1 :(得分:15)
假设第一列是唯一的,您可以这样做:
SELECT id, col2, col3, col4
FROM yourtable
WHERE id IN
(
SELECT MIN(id)
FROM yourtable
GROUP BY col2, col3
)
查看在线工作:sqlfiddle
答案 2 :(得分:1)
假设表格中的列为(id, col1, col2, col3)
,您可以:
SELECT *
FROM YourTable yt
JOIN (
SELECT MIN(id) as minid
FROM YourTable
GROUP BY
col1, col2
) filter
ON filter.minid = yt.id
答案 3 :(得分:0)
此查询确保column1和column2的组合是唯一的,同时选择第三列的最小值
SELECT col1, col2, MIN(col3)
FROM yourTable
GROUP BY col1, col2
答案 4 :(得分:0)
最简单的查询是
SELECT col1, col2, MIN(col3)
FROM myTable
GROUP BY col1, col2
答案 5 :(得分:0)
使用group by方法返回额外的行,其中显式检查每个字段,尽管更长时间返回与count相同的记录数(Distinct ..)
SELECT id, col2, col3, col4
FROM yourtable yt
WHERE id =
(
SELECT MIN(id)
FROM yourtable yt1
WHERE yt.col2 = yt1.col2
AND yt.col3 = yt1.col3
)