したがって、複数の列(a、b、c)の組み合わせによって個別の行を選択する方法は次のとおりです。
select distinct a,b,c from my_table
これは良いことですが、これらの行(d)に対して取得されたさらに別の列が必要です。これは、選択部分に追加できません。これは、不要な行の一意性を決定する役割も果たすためです。
行の一意性に影響を与えずに追加の列を取得するにはどうすればよいですか?
groupbyを使用してこれを行うことができます。MySQLでは、次のことができます。
select a, b, c, d
from my_table
group by a, b, c
これにより、「d」に任意の値が選択されます。これは通常、最初に検出される値です(ただし、保証されません)。これは、隠し列と呼ばれるMySQLの機能を使用します。
MySQLやその他のデータベースで機能するコードの場合、より明確にする必要があります。
select a, b, c, min(d)
from my_table
group by a, b, c
MySQLでdの実際のランダム値を取得するのは少し難しいので、より多くの作業が必要です。これが1つの方法です:
select distinct a, b, c,
(select d from my_table mt2
where mt.a = mt2.a and mt.b = mt2.b and mt.c = mt2.c
order by rand()
limit 1
) d
from my_table mt
参加するための仕事のように見えます...おそらくLEFT JOIN
。このようなもの:
SELECT DISTINCT L.a, L.b, L.c FROM `my_table` L
LEFT JOIN (
SELECT a, b, c, d FROM `my_table`
) R ON L.a=R.a AND L.b=R.b AND L.c=R.c