2017-01-15 6 views
0

テーブル内のアイテムの売り値段が売り値よりも高いかどうかを判断するために、次の表とSQLクエリがあります。すべての列を表示するSQLクエリ

enter image description here

問合せ:

enter image description here

私が持っているすべてのアイテムを表示する必要があります探しています結果:

SELECT id, name 
FROM orders 
GROUP BY id, name 
HAVING MAX(CASE WHEN buy = 'false' THEN price END) > MIN(CASE WHEN buy = 'true' THEN price END) 

問題は、これが唯一の2つの行を返すことですすべての列で売り値より高い買い値。 GROUP BYを読んで私はそれが明確な値を返すだけであることがわかります。最終結果を達成するために結合を使用する必要がありますか?

|id |buy |date     |price |name 
-------------------------------------------------- 
3 false 2017-01-04 19:23:12.000 7  bread 
3 false 2017-01-04 19:23:12.000 4  bread 
2 false 2017-01-04 19:23:12.000 7  grapes 

このクエリを使用すると、赤で強調表示された行の下にある表が表示されます。

SELECT * 
FROM orders 
WHERE id IN (SELECT id 
      FROM orders 
      GROUP BY id, name 
      HAVING MAX(CASE WHEN buy = 'false' THEN price END) > MIN(CASE WHEN buy = 'true' THEN price END)) 

enter image description here

+0

を私はクエリに他の列を追加しようとしています。更新された投稿 –

答えて

1

サブクエリとして、既存のクエリを使用します。

SELECT * from orders where id in 
(
    SELECT id 
    FROM orders 
    GROUP BY id, name 
    HAVING MAX(CASE WHEN buy = 'false' THEN price END) > MIN(CASE WHEN buy = 'true' THEN price END) 
) 
+0

こんにちはFauxmosapienさんへの返信です。あなたの質問にwhere句を追加しました。結果は正しいです。 –

関連する問題