次のような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
私はそれを行う方法についていくつかのサンプルを見つけましたが、それらはすべて各列で個別に選択します。
最初の列が一意であると仮定すると、これを行うことができます:
SELECT id, col2, col3, col4
FROM yourtable
WHERE id IN
(
SELECT MIN(id)
FROM yourtable
GROUP BY col2, col3
)
オンラインで動作することを確認してください: sqlfiddle
上記に対してこれを使用する方が良いです。
SELECT id, col2, col3, col4
FROM yourtable
GROUP BY col2, col3;
私が言っている理由は、CONCATを使用すると、この場合。最初のクエリは5行を返しますが、CONCATは4行を返しますが、これは間違っています。
あなたが私のポイントを得たことを願っています。
テーブル内の列が(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;
テーブル内の列が(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
これに対する最も簡単なクエリは
SELECT col1, col2, MIN(col3)
FROM myTable
GROUP BY col1, col2
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
)
このクエリは、列3と列2の組み合わせが一意であることを確認し、列3の最小値を選択します
SELECT col1, col2, MIN(col3)
FROM yourTable
GROUP BY col1, col2