1

すべての注文を含む「注文」と呼ばれるMySQLデータベースがあります。tableこのテーブルには、次のようなさまざまなフィールドがあります。

id
userId  
dateOrder

注文を行ったユーザーに対してのみ、ユーザーによってグループ化されたすべての注文を取得したいと思いますbetween 2 and 5

しかし、私の SQL クエリは機能しません。論文のエントリを考慮する:

id  userId dateOrder  
1    138    2013-03-19  
2    138    2013-03-19
3    222    2013-03-19

少なくとも 2 つの注文を行ったユーザーによって行われた注文のみを選択する SQL リクエストが必要です。

この例では、SQL は以下を返す必要があります。

userId 138

GROUP BY、 で試しましDISTINCTたが、どれも機能しません。私を助けてくれませんか?ありがとう !!

4

2 に答える 2

2

HAVING句を使用して結果を取得できるはずです。

select userid
from orders
group by userid
having COUNT(*) >= 2
    and COUNT(*) <= 5

デモで SQL Fiddle を参照してください

その後、各注文に関するすべての詳細を返したい場合は、クエリを次のように拡張できます。

select o1.id, o1.userid, o1.dateorder
from orders o1
where exists (select userid
              from orders o2
              where o1.userid = o2.userid
              group by userid
              having COUNT(*) >= 2
                  and COUNT(*) <= 5)

デモで SQL Fiddle を参照してください

于 2013-03-19T18:27:39.273 に答える
1

これでいいと思いますが…

Select * from orders where userid in
(
Select userid from orders
group by userid having count(1) between 2 and 5
)
于 2013-03-19T18:28:35.413 に答える