1

visible_to が多値属性であるテーブルに次のデータを格納しようとしています。

Wall_ID Facebook_ID Visible_To
W1      F1          F2,F3,F4
W2      F2          F1
W3      F3          F1
W4      F4          F1

Oracle で Facebook をエミュレートしようとしています。他人の壁(ここではF1)の最大数を表示できるユーザーを見つけたいです。

Oracle 11g で NESTED テーブルを使用して多値属性を格納するところまで来ました。クエリの結果を見つけるためにテーブルのネストを解除する必要がありますか、それとも別の方法がありますか?

ありがとう!

4

1 に答える 1

1

あなたが正しくやろうとしていることを私が理解している場合、次のようなことがうまくいくはずです( SQL Fiddleを参照してください):

SELECT *
FROM (
  SELECT 
    f.wall_id
  , f.facebook_id
  , COUNT(t.COLUMN_VALUE) visible_to_count
  FROM facebook_data f
  CROSS JOIN TABLE(f.visible_to) t
  GROUP BY f.wall_id, f.facebook_id
  ORDER BY visible_to_count DESC
)
WHERE ROWNUM = 1

結果

| WALL_ID | FACEBOOK_ID | VISIBLE_TO_COUNT |
--------------------------------------------
|      W1 |          F1 |                3 |

これは、ネストされたテーブルを展開してから集計するだけなので、値の数を数えることができます。重複する値を格納する可能性が高い場合はDISTINCT、関数にキーワードを追加することを検討するか、クエリにカーディナリティを導入することも検討してください。COUNT()

于 2013-02-23T12:57:54.400 に答える