2016-07-07 8 views
2

各タガーによって追加されたタグの数をカウントし、各記事の最大タグ数= 5タグをカウントすることで、タグガーの努力をカウントする必要があります。MySQL:グループ別最大制限数

例:

  1. タグ付けは、タグ付けが1条数5に6個のタグを追加した場合は鬼が1条数5
  2. に5個のタグを追加した場合は1条数4
  3. から4個のタグを追加した場合。
  4. 鬼は1条のカウント5.

テーブル構造への10個のタグを追加した場合article_tags

id user_id article_id tag_id 
1  1   1   1 
2  1   1   2 
3  1   2   1 
4  2   3   1 
5  2   3   2 

制限付きでGroup by Groupなどの高度な使い方がありますか? THX、

更新

私は、単一の記事のために最大5と、記事に追加どのように多くのタグを返す必要が

、(そう、誰かが30件の記事のための30個のタグを追加した場合=

答えて

7

これは、あなたが欲しい何であるか

select user_id, least(count(*), 5) 
from article_tags 
group by user_id; 

EDIT:?

私はあなたがAGG 2つのレベルをしたいと思います

SELECT user_id, CASE WHEN COUNT(tag_id) <= 5 THEN COUNT(tag_id) 
       ELSE 5 END AS TOTAL_TAGS 
FROM YOUR_TABLE 
GROUP BY user_id 

・ホープ、このことができます - :regation:

select article_id, sum(cnt) as restricted_tag_count 
from (select user_id, article_id, least(count(*), 5) as cnt 
     from article_tags 
     group by user_id, article_id 
    ) ua 
group by article_id; 
+0

は、私が(単一の記事のために最大5と、記事に追加どのように多くのタグを返す必要がありますだから誰かが30の記事= 30のための30のタグを追加した場合 – mwafi

0
SELECT USER_ID,ARTICAL_ID,if(count(*)>5,5,count(*)) as tags 
from article_tags group by USER_ID,ARTICAL_ID; 
+0

これは彼によって複数のタグ付き記事のために結果で何度もユーザーを返す – mwafi

0

あなたはこのような何かを試すことができます。 'ゴードン・リノフ'

SQLクエリに基づいて

+0

記事に追加されたタグの数を返す必要があります。誰かが30の記事のために30のタグを追加した場合s = 30 – mwafi

0

ソリューション:

select t.user_id,sum(t.total_tags) total 
from 
(
    select user_id, least(count(*), 5) total_tags 
    from article_tags 
    group by user_id,article_id 
) t 
group by t.user_id 

THX、

関連する問題