1

いくつかのデータをグループ化する必要がありますが、ストアイメージが4つあるため、SQLクエリはストアごとに4つの結果を返します。SQLクエリを使用してストアに1つだけ取得するにはどうすればよいですか?

select s.name,si.SHOP_IMG_PATH,count(*) amount  from stab t 
inner join shop s on (s.shop_id = t.shop_id) 
inner join SHOP_IMG si on (s.shop_id= si.SHOP_ID) 
where t.acct_id = 111 and t.CR_DATE >= sysDate - 1
group by s.name,si.SHOP_IMG_PATH 
order by 3 desc,1 asc 

下の画像のように、4つの画像があるので、クエリでランダムな画像を取得できます

ここに画像の説明を入力してください

4

3 に答える 3

1

s.name、si.SHOP_IMG_PATHでグループ化する場合、s.name、si.SHOP_IMG_PATHのすべての可能な組み合わせは、s.nameのみでグループ化する必要がある個別のものと見なされます。

これを試して

SELECT a.NAME, a.PATH, a.AMOUNT
FROM (select 
     s.name AS 'NAME', si.SHOP_IMG_PATH AS 'PATH', count(*) AS 'AMOUNT',
     ROW_NUMBER() OVER(PARTITION BY s.name
                             ORDER BY type si.SHOP_IMG_PATH) AS rk 
from 
     stab t 
inner join shop s on (s.shop_id = t.shop_id) 
inner join SHOP_IMG si on (s.shop_id= si.SHOP_ID) 
where t.acct_id = 111 and t.CR_DATE >= sysDate - 1
group by s.name
order by 3 desc,1 asc) a
WHERE a.rk = 1; 

代替案あなたは結果を得るでしょうが、これはあなたの問題に対する単なる回避策で簡単な代替案ですが、良いものではありません。

select s.name AS 'NAME', min(si.SHOP_IMG_PATH) AS 'PATH', count(*) AS 'AMOUNT',
from 
     stab t 
inner join shop s on (s.shop_id = t.shop_id) 
inner join SHOP_IMG si on (s.shop_id= si.SHOP_ID) 
where t.acct_id = 111 and t.CR_DATE >= sysDate - 1
group by s.name
order by 3 desc,1 asc

この2番目のクエリは、必要に応じて結果を返します

于 2013-03-12T11:10:27.150 に答える
1
group by s.name, si.SHOP_IMG_PATH

に従ってそれらを区別するように指示していますSHOP_IMG_PATH。したがって、それぞれに 1 つずつ、合計 4 つの結果が表示されます。

使用させない場合はSHOP_IMG_PATH、句から削除する必要があります。select

編集

コメントをいただきました。あなたが探しているのはランダム集計です。これは、異なる SQL エンジンでは異なる方法で達成されます。使用しているものについては、Google で検索してください。

質問タグで示されているように、オラクルの場合は、こちら

于 2013-03-12T10:53:30.430 に答える
0

以下のクエリを使用して問題を解決しました。

select s.name,t.shop_id,(select min(SHOP_IMG_PATH) from SHOP_IMG si where shop_id =t.shop_id),count(*) amount  from stab t 
inner join shop s on (s.shop_id = t.shop_id) 
where t.acct_id = 111 and t.CR_DATE >= sysDate - 1
group by s.name,t.shop_id
order by 4 desc,1 asc
于 2013-03-12T11:30:26.170 に答える