2

以下は非常に基本的なシナリオです。

GROUP BY多くの例を見ても、どのように機能するかを理解するのは難しいと感じています。

以下のシナリオでは、日付の最小値を取得する必要があり、クエリ 1 をクエリ 2 に変換する必要があります。

クエリ1:

SELECT b.aper07_req_created_s,
       b.aper06_req_status_k,
       a.aper06_req_status_x
FROM   iaper07_employee_offbrd_req b,
       iaper06_req_status a
WHERE  a.aper06_req_status_k = b.aper06_req_status_k
       AND b.aper07_req_k = 3387
       AND b.aper06_req_status_k = 4
ORDER  BY b.aper07_req_created_s 

クエリ 2:

SELECT Min(b.aper07_req_created_s),
       b.aper06_req_status_k,
       a.aper06_req_status_x
FROM   iaper07_employee_offbrd_req b,
       iaper06_req_status a
WHERE  a.aper06_req_status_k = b.aper06_req_status_k
       AND b.aper07_req_k = 3387
       AND b.aper06_req_status_k = 4
GROUP  BY b.aper06_req_status_k,
          a.aper06_req_status_x
ORDER  BY b.aper07_req_created_s 

クエリ 2 は、group by 式ではないことを示して失敗しています。

誰かが説明で2番目のクエリを正しく取得する方法を理解するのを手伝ってくれますか?

4

3 に答える 3

2

クエリ 2 では、ORDER BY句が無効です。

a の後GROUP BY(つまり、HAVINGおよびORDER BYSELECT部分) では、式は GROUP-BY 列、定数、または他の列の集計関数に基づいている必要があります。

代わりに使用できますORDER BY MIN(b.aper07_req_created_s)

于 2012-10-03T09:53:12.137 に答える
1

おそらくあなたの問題はにありますORDER BY b.aper07_req_created_s、それを次のように置き換えてみてください:

Min(b.aper07_req_created_s)による注文:

  SELECT Min(b.aper07_req_created_s),
           b.aper06_req_status_k,
           a.aper06_req_status_x
    FROM   iaper07_employee_offbrd_req b,
           iaper06_req_status a
    WHERE  a.aper06_req_status_k = b.aper06_req_status_k
           AND b.aper07_req_k = 3387
           AND b.aper06_req_status_k = 4
    GROUP  BY b.aper06_req_status_k,
              a.aper06_req_status_x
    ORDER  BY Min(b.aper07_req_created_s)

1で注文:

 SELECT Min(b.aper07_req_created_s),
           b.aper06_req_status_k,
           a.aper06_req_status_x
    FROM   iaper07_employee_offbrd_req b,
           iaper06_req_status a
    WHERE  a.aper06_req_status_k = b.aper06_req_status_k
           AND b.aper07_req_k = 3387
           AND b.aper06_req_status_k = 4
    GROUP  BY b.aper06_req_status_k,
              a.aper06_req_status_x
    ORDER  BY 1

エイリアスを使用することもできます。

    SELECT Min(b.aper07_req_created_s) minemp,
           b.aper06_req_status_k,
           a.aper06_req_status_x
    FROM   iaper07_employee_offbrd_req b,
           iaper06_req_status a
    WHERE  a.aper06_req_status_k = b.aper06_req_status_k
           AND b.aper07_req_k = 3387
           AND b.aper06_req_status_k = 4
    GROUP  BY b.aper06_req_status_k,
              a.aper06_req_status_x
    ORDER  BY minemp

ここでより多くの情報を見つけることができます。

于 2012-10-03T10:03:23.913 に答える
1

GROUP BYSQLでどのように機能するかを説明するために:(
私は言うでしょう)それはあなたがそれが機能することを期待するのとまったく同じ論理的な方法で機能します。
果物のバスケットがあり、種類をグループ化して持っているすべての果物の数を取得したい場合は、次のようにします。

SELECT groupingType, count(groupingType)
FROM fruitBasket
GROUP BY groupingType

groupingTypeとしてフルーツタイプ(リンゴ、ナシ...)を使用する場合、それら(リンゴ、ナシ...)が異なる色である可能性があるという理由だけで、結果にフルーツの色を取得することはできません。同じように、色でグループ化すると、果物の種類を取得できなくなります...

于 2012-10-03T10:11:06.610 に答える