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

时间:2016-12-20 16:04:56

标签: mysql aggregate-functions

我正在尝试选择具有相同session_id的记录,并且以下mysql语句有效:

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

但是我只能访问session_id,而不能访问任何其他字段。我试过像:

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

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

1 个答案:

答案 0 :(得分:2)

您的查询生成聚合结果集,并且您尝试同时显示详细信息值(原始表中的值,而不是聚合值)。

所以,如果你试试这个,你会得到一些东西。对于 <script language="JavaScript" type="text/javascript"> function changeUrl(el) { var el = document.getElementById('inputid').value; var im = document.getElementsByTagName(img); im.src = el; } </script> <input type="text" id="inputid" value="" onBlur="changeUrl(this.value)"/> 的每个值,other_fieldANY_VALUE() tells MySQL explicitly to choose some single value

session_id

小心the ANY_VALUE() function:它应该被称为SELECT COUNT(session_id) AS NumOccurrences, ANY_VALUE(other_field) FROM my_table GROUP BY session_id 。它返回SURPRISE_ME()组中某行的值。它返回哪一行完全取决于MySQL服务器。它不是一个随机值,它比这更糟糕。每次运行查询时它都会返回相同的值,直到它没有。当表增长或缩小时,或者当服务器具有更多或更少的RAM,或者当服务器版本发生变化,或者当火星逆行时,它可以改变或不改变,无论这意味着什么。你被警告了。

您也可以

GROUP BY

获取SELECT COUNT(session_id) AS NumOccurrences, GROUP_CONCAT(DISTINCT other_field ORDER BY other_field) FROM my_table GROUP BY session_id 的值列表。

此外,other_field是多余的。您的结果集中无法显示特定HAVING COUNT(*) > 0值,除非它出现在您表格的至少一行中。