使用COUNT语句选择多个mysql字段

使用COUNT语句选择多个mysql字段,mysql,aggregate-functions,Mysql,Aggregate Functions,我正在尝试选择具有相同会话id的记录,以下mysql语句有效: SELECT session_id, COUNT(session_id) AS NumOccurrences FROM my_table GROUP BY session_id HAVING COUNT(*) > 0 然而,我只能访问会话id,不能访问任何R字段。我试过这样的方法: SELECT session_id, other_filed COUNT(session_id) AS NumOccurrences FROM

我正在尝试选择具有相同会话id的记录,以下mysql语句有效:

SELECT session_id, COUNT(session_id) AS NumOccurrences
FROM my_table
GROUP BY session_id
HAVING COUNT(*) > 0
然而,我只能访问会话id,不能访问任何R字段。我试过这样的方法:

SELECT session_id, other_filed COUNT(session_id) AS NumOccurrences
FROM my_table
GROUP BY session_id
HAVING COUNT(*) > 0
但它不起作用。也尝试过*,但也不起作用:

SELECT * COUNT(session_id) AS NumOccurrences
FROM my_table
GROUP BY session_id
HAVING COUNT(*) > 0

您能帮我解决这个问题吗?

您的查询生成一个聚合结果集,同时您试图显示一个详细值(来自原始表的值,而不是聚合值)

所以如果你尝试一下,你会得到一些东西。会话id的每个值的
其他\u字段的

SELECT COUNT(session_id) AS NumOccurrences,
       ANY_VALUE(other_field)
  FROM my_table
 GROUP BY session_id
小心:它真的应该被称为
shopping\u ME()
。它按组返回
组中某一行的值。返回哪一行完全取决于MySQL服务器。这不是一个随机值,比这更糟糕。每次运行查询时,它都返回相同的值,直到它不返回为止。当一个表变大或变小时,或者当服务器的RAM变大或变小时,或者当服务器版本改变时,或者当Mars逆行时,不管这意味着什么,它都可以改变,也可以不改变。你已经被警告了

你也可以这样做

SELECT COUNT(session_id) AS NumOccurrences,
       GROUP_CONCAT(DISTINCT other_field ORDER BY other_field)
  FROM my_table
 GROUP BY session_id
要获取
其他\u字段的值列表


另外,
计数(*)>0是多余的。除非某个特定的
会话id
值至少出现在表的一行中,否则它无法出现在结果集中。

看起来您在
计数之前遗漏了一个
。在其他字段之后遗漏了一个逗号。但是,由于group by每次会话总是只返回一行,我明白了-由于其他字段不同,它不能返回一个值…将输出关闭
SHOW CREATE TABLE[您的表]
。。。在“选择分组方式中未使用的内容”中使用列是自找麻烦,因为您在查询2和查询3中错误地使用了分组方式。。。如果您想选择双重(或更多)会话id,您的查询应该是这样的<代码>选择会话id,将(会话id)作为NumOccurrences从my_表组中按会话id计数(*)>=2
选择会话id,将(会话id)作为NumOccurrences从my_表组按会话id计数NumOccurrences>=2