【问题标题】:How to select columns and count(*)? in SQL如何选择列和计数(*)?在 SQL 中
【发布时间】:2016-10-12 19:41:06
【问题描述】:

我有这样的表格:

用户(idUser、nameUser 等)

聊天(idChat,txtChat)

成员(idUser,idChat)

我必须选择用户中的所有列,以及该用户在多少个群聊(超过 2 个成员)中以及在多少个常规聊天中(两个成员)。

我的第一个想法是进行两个或多个选择并使用联合,但结果发现它并不像那样工作。

我试过这样的

    select *
    from User
    where idUser in (select idUser
                     from Members)

我尝试获取正在聊天的用户,但我真的不知道如何计算

或类似的东西,我真的不知道在哪里放置 count (*) 我知道如何计算一个选择让我获得的行数,但我不知道如何将它作为另一列获得

【问题讨论】:

标签: sql-server select count


【解决方案1】:

这样的事情应该为你做事(GROUP BY):

SELECT  u.idUser,
        u.nameUser,
        COUNT(DISTINCT m.idChat) as countChats
FROM [User] u
LEFT JOIN Members m
    ON u.idUser = m.idUser
GROUP BY u.idUser, u.nameUser

PARTITION BY

SELECT DISTINCT 
        u.idUser,
        u.nameUser,
        COUNT(m.idChat) OVER (PARTITION BY nameUser) as countChats
FROM [User] u
LEFT JOIN Members m
    ON u.idUser = m.idUser

【讨论】:

  • 非常感谢您的回复!我真的不明白不同或分区是什么,但这将帮助我更接近!
  • DISTINCT - 获取不重复的数据,PARTITION BY - 将查询结果集划分为分区,与GROUP BY类似,但不一样。
  • 问题浮出水面,我需要检查 Chat 是群组聊天还是普通聊天,其列为 0 或 1,我不知道如何分隔两个聊天,我尝试执行类似的操作select u.idUser, u.nameUser Count(Distinct m.idChat) as Chats from User u, Chat c1, Chat c2 但是当谈到“哪里”时,我不知道怎么写,我尝试了c1.idChat=m.idChat or c2.idChat=m.idChat,但我得到了奇怪的结果,知道吗?
  • 你在哪个表的哪一列确定聊天是群聊还是正常聊天?并且永远不要使用 ',' 而不是正确的 JOIN 语法。您应该通过 m.chatid = c.chatid 和在 WHERE 添加 AND c.isGroup = 0 的 Chat 表加入所有这一切(来自我的回答)
  • 然后你需要添加 c.isGroup 或任何这个列被调用到查询的 SELECT 和 GROUP BY 部分。在 SELECT 中,您可以使用 CASE WHEN c.isGriup =1 THEN 'Group' ELSE 'Normal' END 作为 ChatType。
猜你喜欢
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多