0

必要なものをよりよく説明するには、次の表をご覧ください。

ID --- image
A1 --- a1_01.jpg
A1 --- a1_02.jpg
B7 --- b7_01.jpg
B7 --- b7_02.jpg
D3 --- D3_04.jpg
D3 --- D3_99.jpg
... (From A to Z)
Z9 --- Z9_12.jpg
Z9 --- Z9_13.jpg
Z9 --- Z9_20.jpg
Z9 --- Z9_99.jpg
...and so on

結果を次のようにする必要があります。

ID --- Image
A1 --- a1_01.jpg
B7 --- b7_01.jpg
D3 --- D3_04.jpg
...
Z9 --- Z9_12.jpg
...and so on

MS-Access では、これを行うことができますSELECT ID, First(image) AS 'Image' FROM Photos

MYSQL でこれを達成するにはどうすればよいですか?

これは、私の問題を説明するためのモックアップ テーブルであることを思い出してください。私はたくさんのレコードを持っています。それは単一の (最小/最大) 値ではありません!

===編集: 11/24/2012=== 最終
SQL コード:

SELECT ID, Min(image) AS 'Image' 
FROM Photos 
GROUP BY ID

ありがとうございます@triclosan & @iDevlop !!!

4

3 に答える 3

2

私が見るかもしれないように

select ID, min(image)
from tbl
group by ID
于 2012-11-22T13:58:55.750 に答える
1
SELECT ID, Min(image) AS 'Image' FROM mockup GROUP BY ID
于 2012-11-22T14:01:29.307 に答える
0

最初の画像が最小値の画像でもあり、最後の画像が最大値の画像でもある場合、この MySql クエリは必要なものを正確に返します。

Select ID, min(image) as first_image, max(image) as last_image
From Tbl
Group By ID

それ以外の場合、MySql には集計関数がないためfirst()last()次のようなものを使用できます。

Select
  Distinct ID,
  (select image from tbl a where a.ID = tbl.ID order by something ASC LIMIT 1) as first_image,
  (select image from tbl a where a.ID = tbl.ID order by something DESC LIMIT 1) as last_image,
From tbl

ただし、テーブルをいくつかのフィールドで並べ替える必要があることに注意してください。テーブルをいくつかのフィールドで並べ替えることができない場合、どの値が最初に来てどれが最後に来るかを知る方法はありません.

私はよくこのクエリを目にします。これは見栄えがよく、最初のフィールドを返すことになっています。

Select ID, image
From tbl
Group by ID

これは、通常は機能する非標準の SQL クエリであり、(ほぼ?) 常に最初の画像を正しく返します。しかし、imageis はgroup by句に含まれておらず、どの集計関数にも関連付けられていないため、サーバーは自由に任意の値を返すことができます。常に最初の値を返すようですが、保証されていないため、使用しないことを好みます。

いくつかの説明:

あなたの例では、最小値は常に最初の値と一致するため、最小値を探しているのか最初の値を探しているのかを例から判断する方法はありません。

これがあなたのデータであるとします:

ID  image
=============
A1  a1_02.jpg
A1  a1_01.jpg

A1, a1_01.jpg最小 ( )を探している場合min(image)は、まさに必要なものであり、機能します。

A1, a1_02.jpgしかし、この例では最初のを取得しようとすると、問題が発生します。特定の ORDER BY がないと、行は予測できない方法で返されます。はい、多くの場合/ほとんどの場合、テーブルスペースに物理的に存在する順序で返されますが、これに依存することはできません。

たとえば、この質問と回答を参照してください。

デフォルトのソート順を処理する SQL のベスト プラクティス

これは、行がどのように並べられているかがわからない場合、どれが最初でどれが最後かを判断できないことを意味します。たとえば、次のクエリを参照してください。

Select
  Distinct ID,
 (select image from tbl a where a.ID = tbl.ID LIMIT 1) as first_image
From tbl

これにより、おそらく探しているものが返されます。ただし、ORDER BY 句を省略したため、常に機能するという保証はありません。また、last_image も削除する必要があることに注意してください。これは、MySql にデフォルトの順序 DESC でテーブルを順序付けするように指示する方法がないためです。このようなデフォルトの順序は存在しないためです。

このクエリは、おそらく最初の画像も返します。

Select ID, image
From tbl
Group By ID

標準 SQL では、select で非集計列を参照することはできませんが、MySql では可能です。そして、おそらくすべての ID の最初の画像を返します。しかし、ドキュメントを見てみましょう:

http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html

「サーバーは各グループから任意の値を自由に選択できるため、それらが同じでない限り、選択された値は不確定です。」したがって、サーバーがほぼ常に最初の行を返すという事実は単なる偶然であり、文書化されていません。

于 2012-11-22T18:13:50.403 に答える