2017-10-12 12 views
1

たとえば、2つのテーブルvendorとvendorCategoryがあります。そして、私は別のカテゴリの6つのランダムなベンダーを取得したいと思います。どのようにpostgresqlに変換する必要がありますか?または、より良いQueryDSL for java。カテゴリーごとにランダムなレコードを1つ取得するSQL

私はベンダーいる例:ようにV1、V2、V3、そして... はその後、私はカテゴリがありますようにC1、C2、C3との...私たちの例では はのは、VXは、カテゴリCXを持っているとしましょう。したがって、v1にはカテゴリc1があり、v2にはc2などがあります。

クエリの結果は、v1、v2、v3、v4、v5、v6を返す必要があります。または任意の順序で。同じカテゴリのベンダーは返さないでください。たとえば、カテゴリーc1のv1aがあるとします。したがって、v1とv1aを一緒に返すべきではありません。

+1

あなたの質問を編集し、サンプルデータと希望する結果を提供してください。 「異なる」カテゴリとはどういう意味ですか? –

+0

質問が更新されました。ありがとう。 – czetsuya

答えて

2

ありがとう:

select * from 
(
SELECT DISTINCT ON(vc.id) v.vendor_name, vc.description, vc.id 
FROM cat_vendor_category AS vc 
INNER JOIN cat_vendor AS v ON v.vendor_category_id = vc.id 
ORDER BY vc.id, random() 
    ) Q 
    order by random() 
LIMIT 6; 

これは、一意のカテゴリを持つベンダーのランダムなリストを生成します。

実際の問題は、QueryDSLまたは少なくともjpqlに変換する方法です。

1

このようなものです。名前はあなたの特定の構成に依存している:そう

SELECT DISTINCT ON(vc.id), v.vendorName, vc.categoryName 
FROM vendorCategory AS vc 
INNER JOIN vendors AS v ON v.categoryId = vc.id 
ORDER BY random() 
LIMIT 6; 

、別個のカテゴリー、ランダム行とわずか6

あなたは正しい答えを取得したい場合は、サンプルテーブルを提供してください。私はちょうどあなたが完全な解決策ではなく、私がそれをどのように見ているかという考えを与えました。 (PostgreSQLのに特別な)このような(があるので本当のデータなし)

+1

エラーをスローします。「SELECT DISTINCT ON式は、最初のORDER BY式と一致する必要があります。 – czetsuya

1

あなたは(DISTINCT ONを使用することができます):私が思い付くことができた上に2件の回答に

SELECT DISTINCT ON (vc.categoryName) v.vendorName, vc.categoryName 
FROM vendorCategory vc 
INNER JOIN vendors v ON v.categoryId = vc.id 
LIMIT 6 
+0

これは実際に私たちが思いついたものです。しかし問題は、常に特定のカテゴリの最初の行を取得することです。たとえば、ベンダーv1、v2、v3のカテゴリc1があります。それで何回何度このクエリを実行しても、常にv1が返されます。 – czetsuya

関連する問題