2016-05-27 10 views
0

することによりにより、グループやご注文は、私のようなテーブルを持っている:MYSQL -

ID Field1 Field2 Field3 
1  Apple  Fruit  Cheap 
2  Apple  Fruit  Eatable 
3  Apple  Food  Something 
4  Banana Fruit  Cheap 
5  Banana Food  Eatable 
6  Cat  Pet  Weird 
7  Cat  Pet  Friend 
8  Cat  Pet  Amazing 
9  Cat  Animal Cheap 

が、私は明確なフィールド1、フィールド2の要素を取得したいとソートフィールド3含む「格安」で。 私はこれを期待している:ID = 2は同じFIELD1を有するもの

ID Field1 Field2 Field3 
1  Apple  Fruit  Cheap 
4  Banana Fruit  Cheap 
9  Cat  Animal Cheap 
3  Apple  Food  Something  
5  Banana Food  Eatable 
6  Cat  Pet  Weird 

結果がIDを持つ行している= 2,7,8-が除去され、ID = 1、ID = 7,8としてFIELD2は、同じFIELD1を有しますID = 6としてフィールド2。 ID = 1およびID = 2は、同じField1およびField2を有する。 ID = 6,7,8のうちの1つだけが、別個のField1、Field2を有するために結果に入る。

私は「グループ化」と「フィールド別の並べ替え」を試しましたが、「グループ化」することで必要な行がなくなりました。たとえば、ID = 1のグループ化がなく、ID = 2の行が存在するとします。

私の現在のクエリは次のとおりです。

ID = 2の代わりに、ID = 1

は誰でも助けることができます検討している「ことで、グループ」として=「格安」フィールド3で私に2行のみを与える

select * from tbl 
group by field1,field2 
order by field(field3,"CHEAP") desc; 

私はこれで?

ありがとうございます。

+0

もこれを試すことができますか? – Hooch

+1

なぜ1ではなく2を削除したいのですか? –

+0

field3 = "Cheap"の行がすべて結果に含まれていることを確認します。私はグループの代わりに何らかのサブクエリを使うべきだと思います。 – rohan

答えて

2

これを試してください:

SELECT t1.ID, t1.Field1, t1.Field2, t1.Field3 
FROM mytable AS t1 
JOIN (
    SELECT Field1, Field2, MAX(Field3) AS min_field3, 
     COUNT(CASE WHEN Field3 = 'Cheap' THEN 1 END) AS cnt_cheap 
    FROM mytable 
    GROUP BY Field1, Field2 
) AS t2 ON t1.Field1 = t2.Field1 AND 
      t1.Field2 = t2.Field2 AND 
      t1.Field3 = IF(t2.cnt_cheap = 1, 'Cheap', min_field3) 
ORDER BY FIELD(Field3, 'Cheap') DESC 

上記のクエリは、このようなレコードが存在する場合、それ以外の場合は最大Field3値を有するレコードを選び、Field1, Field2群から「安い」のレコードを取り出します。

+0

@rohan私のクエリは、与えられたサンプルデータの期待される結果を返します。与えられた 'Field1、Field2'対に対して、' Field3'が複数回繰り返された場合に重複を得ることがあります。 –

+0

ありがとう、非常に。感謝します! – rohan

0

あなたのクエリは何

select id,field1,field2,field3 
from tabel1 
group by field3 
order by field1 DECS and field2 DECS