如何按列统计分组记录

问题描述 投票:0回答:2

我有一个存储 userID、isRead、type、message 的通知表

UserID 是用户的id。 isRead 存储 1/0 用于已读/未读。 类型存储通知的类型,“提及/关注/回复”。 消息是用户将看到的消息。

我需要一个分组查询,它可以返回不同的“类型”和该类型的未读消息数,但仅限于 1 条记录。

如何更改下面的查询以获得如下结果集:

请注意,该类型的未读消息数量可能更多,但我希望查询在找到第一条记录后立即停止计数。然后它开始寻找其他类型。

运行 3 个单独的查询,每个 TYPE 一个,会更快吗?

select type from table where userID=123 and isRead=0 group by type

0=array(
  'type'=> mention,
  'count'=> 1
)
1=array(
  'type'=> reply,
  'count'=> 1
)
and so on
sql mysql aggregate-functions
2个回答
0
投票

这样的事情可能会有所帮助

SELECT type FROM (
    SELECT type FROM table WHERE type = 'mention' AND userID = 123 AND isRead = 0 LIMIT 1
    UNION
    SELECT type FROM table WHERE type = 'follow' AND userID = 123 AND isRead = 0 LIMIT 1
    UNION
    SELECT type FROM table WHERE type = 'reply' AND userID = 123 AND isRead = 0 LIMIT 1
) AS X

0
投票

大概,你想要这样的东西:

select type 
from mytable 
where userID = 123 
group by type
having min(isRead) = 0

查询过滤给定用户,按类型分组,并只选择至少有一行未读的组。

对于性能,以下索引可能有帮助:

mytable(userID, type, isRead)
© www.soinside.com 2019 - 2024. All rights reserved.