MySQL:使用group by和max limit计数

时间:2016-07-07 11:14:42

标签: mysql sql

我需要计算标记工作量,计算每个标记器添加的标记数量,每篇文章的最大标记数= 5个标记。

例如:

  1. 如果tagger在一个文章计数4中添加了4个标签。
  2. 如果tagger将5个标签添加到一个文章计数5。
  3. 如果tagger在一个文章计数5中添加了6个标签。
  4. 如果tagger将10个标签添加到一个文章计数5。
  5. 表格结构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或类似的东西? THX,

    更新

    我需要返回添加到文章中的标签数量,单个文章最多5个(所以如果有人为30篇文章添加了30个标签= 30

4 个答案:

答案 0 :(得分:7)

这是你想要的吗?

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

编辑:

我认为您需要两个级别的聚合:

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;

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以尝试这样的事情: -

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

希望这有帮助。

答案 3 :(得分:0)

基于&#39; Gordon Linoff&#39;

的解决方案

SQL查询:

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,