【问题标题】:Join two group by commands into one将两个 group by 命令合二为一
【发布时间】:2012-06-12 08:49:37
【问题描述】:

我有一张桌子

________________________________________________________________________________
|                         Message                                               |
|_______________________________________________________________________________|
| ID(INT) |  Text(TEXT) |read(TINYINT(0/1)) |deleted(TINYINT(0/1))|  User_id    |
| 1       | How Are You?|      0            |        0            |    6        |
| 2       | Fine        |      0            |        1            |    4        |
| 3       | Message 3   |      1            |        0            |    6        |
| 4       | Message 4   |      0            |        1            |    6        |
| 5       | Message 5   |      1            |        0            |    5        |
|_________|_____________|___________________|_____________________|_____________|

现在我想选择 user_id=6 的消息,并分别选择 read=0 和 read=1 的列数。我知道这可以通过按命令分组来完成,我目前使用两个 sql 查询来完成。有人可以加入他们的行列

select message,count(*) from message where User_id=6 and read=0 group by id;//for unread message
select message,count(*) from message where User_id=6 and read=1 group by id;//for read message

【问题讨论】:

    标签: mysql sql select group-by message


    【解决方案1】:

    加入你的两个查询很容易,但我没有得到你真正想要的。

    SELECT `message`, count(*) AS `cnt` , `read`
    FROM message 
    WHERE `User_id`=6 
      AND `read` IN ( 0, 1 ) 
    GROUP BY `id` , `read`;
    

    【讨论】:

    • 查看 simon 的回答并告诉我他的回答有什么缺点
    • @Somebodyisintrouble 老实说,与您的相比,他的查询至少是有意义的。因此,如果结果如您所愿,我建议您接受他的询问。我没有看到任何直接的缺点。正如他所说,您应该放弃WHEREGROUP BY 声明。可能是后者。
    【解决方案2】:

    你为什么不

    select
      message,
      sum(read) as num_read,
      sum(case read when 0 then 1 else 0 end) as num_unread
    from message
    where user_id = 6
    group by user_id
    

    ?您可以逐行删除 where 或 group,这取决于您的实际需要和 SQL 实现。

    【讨论】:

    • 性能很难像这样评估。我只能说 DMBS 可能只会读取您的表格一次。
    【解决方案3】:

    试试这个:

    select read,id,count(*) 
      from message 
     where user_id = 6 and read in (0,1) group by read,id
    

    【讨论】:

      猜你喜欢
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 2019-03-13
      相关资源
      最近更新 更多