3

MySQLのフィールドの最初の明確な一致のみを返すにはどうすればよいですか?

私のテーブル:

name     hash
----------------
Anna     ABC
Barb     DEF
Charlie  GHI
Anna     JKL
Andrea   MNO

私のクエリ(for %An%):

SELECT DISTINCT(name) as name, hash FROM my_table WHERE name LIKE '%An%';

これは次を返します:

name     hash
----------------
Anna     ABC
Anna     JKL
Andrea   MNO

代わりに:(私が求めている結果)

name     hash
----------------
Anna     ABC
Andrea   MNO

それぞれの異なる名前の最初の一致のみを取得するにはどうすればよいですか?

最初のを返し、2番目(および後続の一致)をスキップしたいのですAnnaが、それでも取得します(およびまたはAndreaのようなさらに明確な一致)。AndrewAnthony

4

5 に答える 5

10

DISTINCTそのようには機能しません。値は、返されるすべての列で異なる必要があります。

関数ではいつでも集計関数を使用できhash、それぞれに1つの値をGROUP BY name返します。hashname

SELECT name, min(hash) hash
FROM my_table 
WHERE name LIKE '%An%' 
GROUP BY name;

SQL FiddlewithDemoを参照してください。

注:で集計関数を使用するとGROUP BY、列の期待値が常に返されるようになりhashます。GROUP BYリスト内のアイテムを集約しない、または集約しない場合SELECT、予期しない結果が返される可能性があります。(MySQL拡張機能をGROUP BY参照してください)

MySQLドキュメントから:

MySQLはGROUPBYの使用を拡張して、選択リストがGROUPBY句で指定されていない非集計列を参照できるようにします。...この機能を使用すると、不要な列の並べ替えやグループ化を回避して、パフォーマンスを向上させることができます。ただし、これは主に、GROUPBYで指定されていない各非集計列のすべての値が各グループで同じである場合に役立ちます。サーバーは各グループから任意の値を自由に選択できるため、同じでない限り、選択される値は不確定です。さらに、各グループからの値の選択は、ORDERBY句を追加しても影響を受けません。結果セットのソートは値が選択された後に行われ、ORDERBYはサーバーが選択する値に影響を与えません。

于 2013-02-21T19:43:40.920 に答える
3

MySQLを使用する場合GROUP BY,、同じクエリレベルでデスクオーダーを破棄します。

それ以外の:

SELECT name, hash 
FROM my_table
GROUP BY name
ORDER BY name ASC, hash DESC

降順でサブクエリを使用します。

SELECT * FROM(
  SELECT name, hash
  FROM my_table
  ORDER BY name ASC, hash DESC
)Q 
GROUP BY name
于 2013-08-21T16:41:29.813 に答える
1

これを試して

SELECT name , hash FROM my_table WHERE name LIKE '%An%'
GROUP BY name;

デモSQLFIDDLEはこちら

于 2013-02-21T19:46:20.237 に答える
1
SELECT 
  name, hash 
FROM 
  my_table 
WHERE 
  name LIKE '%An%' 
GROUP BY 
  name;
于 2013-02-21T19:40:56.520 に答える
0

DISTINCTデータの一意の行を提供します。あなたの例ではハッシュが異なっているので、なぜあなたはあなたが望む結果を得られないのですか?

質問:ハッシュは何に使用されますか?あなたはそれをユニークにする必要がありますか、それとも必要ではありませんか?

不要な場合は、SELECT句から削除すると、一意の名前が付けられます。

必要であるが一意である必要がない場合は、GROUP BY句を追加できます。つまりGROUP BY name、結果を名前でグループ化します(一意の名前のみを指定します)。を使用GROUP BYすると、名前が「Anna」の場合、ハッシュの値は「ABC」または「JKL」のいずれかになります。

于 2013-02-21T19:44:43.430 に答える