使用COUNT语句选择多个mysql字段
我正在尝试选择具有相同会话id的记录,以下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
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