当前位置: 首页 > 知识库问答 >
问题:

如何在mysql中按两列分组

仲孙毅
2023-03-14

我正在建立一个聊天网站,我有一个包含以下列的表,from_idto_idmessages

from_id是聊天来源的用户的ID,而to_id是聊天发送到的用户ID

现在我想获取所有聊天,但我也想分组,如果to_id是我的id,它将按from_id分组,如果from_id是我的用户id,它将按to_id分组,我尝试了这个select*FROM聊天,其中from_id=:Me to_id=:Me按from_id、to_id分组,但它只是在from_idto_id相同时才分组,我怎么也能让它反过来呢

共有2个答案

贝浩歌
2023-03-14

您可以使用case表达式执行此操作:

SELECT CASE WHEN from_id = :me THEN to_id ELSE from_id END id,
       GROUP_CONCAT(messages) messages -- I added this as an aggregate function
FROM chats 
WHERE :me IN (from_id, to_id) 
GROUP BY id

但如果不需要任何聚合,则不应使用Group By,而应使用Distinct:

SELECT DISTINCT CASE WHEN from_id = :me THEN to_id ELSE from_id END id
FROM chats 
WHERE :me IN (from_id, to_id) 
马华茂
2023-03-14

聚合通常用于获取多行并将它们压缩为单行。那似乎不是你的本意

听起来你有一个排序问题,而不是聚合问题。如果您想通过“Other”id点播聊天,您可以使用:

select c.*
from chats c
where :me in (to_id, from_id)
order by (case when :me = to_id then from_id else to_id end);
 类似资料:
  • 问题内容: 建立库存系统。我有很多产品,每个产品都有三个不同的变量。因此,对于总库存,我想按两列(产品和尺寸)和总数量分组以获得总库存。 我想要输出的内容: 小部件一-2:375 小部件二-3:150 小部件二-2:150 我想出了如何使用以下代码将一列分组并求和: 我只是按两列分组。可能吗?还是应该仅针对这三种尺寸的商品创建三种不同的产品并删除该列?谢谢。 问题答案: 根据示例表,您似乎希望分组

  • 问题内容: Oracle的表服务器提供了一个内置功能。此功能将任何时间戳转换为前一个星期日的午夜。在MySQL中执行此操作的最佳方法是什么? Oracle还提供将时间戳转换为发生该月的第一天的午夜。在MySQL中,这很简单: 但是这个技巧将在数周内失效。我知道此功能,但是我真的不想要一年内的星期数。这些东西是用于多年的工作。 问题答案: 想通了…有点麻烦,但这就是。 而且,如果您的业务规则说您的工

  • 问题内容: 我有一个像下面的表格 我需要先获得特色产品,然后再选择优先级为p1,p2和p3的产品 我写了一个查询,在下面是行不通的。 你能在那发现错误吗 问题答案: 试试这个 如果您在mysql枚举上使用ORDER BY,则不会按字母顺序对其进行排序,而是会按其在枚举中的位置对其进行排序。 如果要按照描述的字母顺序排序,请将枚举名称转换为这样的字符串

  • 本文向大家介绍如何在MySQL中按分组字段排序?,包括了如何在MySQL中按分组字段排序?的使用技巧和注意事项,需要的朋友参考一下 要对分组字段进行ORDER BY,请将ORDER BY CASE与一起使用。CASE评估不同的条件,而ORDER BY则按升序或降序对值进行排序。MySQL用于查找匹配项。 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记

  • 你是怎么做到的? 我在想Streams.GroupByKey()...然后按十六进制值groupBy但我需要将KTable转换为kstream... 更新 null 无论我从哪一个主题阅读,我都会收到这样的消息{ImagePath:{HexCode:#FFF}}。图像路径是关键,hexCode是值。我可以有一个到多个imagePaths,所以我的想法是我的前端将有一个websocket来拾取它。它

  • 问题内容: 问题答案: Mysql作为关键字的分隔符使用反引号“`”,而不是方括号(例如sql server)