SQL查询计算会话而不重复行

时间:2014-08-05 11:24:18

标签: mysql sql

我有两个表,它们通过名为user_id的字段连接起来。第一个名为sessions的表可以在同一天拥有多行。我试图找到一种方法来选择那些会话的总数而不重复那些日子(某种程度)。

示例:

Table sessions
ID | user_id | datestart
1      1        2014-08-05
2      1        2014-08-05
3      2        2014-08-05

如您所见,有两条线重复(第一条和第二条)。如果我查询SELECT COUNT(sess.id) AS total,则会检索3,但我希望它检索2,因为前两行具有相同的user_id,因此它必须计为一个。

使用条款Group By将检索两个不同的行:21,这也是错误的。

您可以查看SQLFiddle处的完整示例。

无论如何只能通过查询解决这个问题,还是需要按语言来解决?

3 个答案:

答案 0 :(得分:2)

我认为您正在寻找count(distinct)

SELECT COUNT(distinct user_id) AS total
FROM sessions sess INNER JOIN
     users user
     ON user.id = sess.user_id
WHERE user.equipment_id = 1 AND
      sess.datestart = CURDATE();

答案 1 :(得分:1)

如果我正确理解了问题,您需要具有会话的用户数,而不是唯一会话数。使用DISTINCT:

SELECT COUNT(DISTINCT(user_id)) FROM sessions,users WHERE user_id=users.id

答案 2 :(得分:0)

尝试这种方式:

SELECT COUNT(distinct sess.user_id) AS total
FROM sessions AS sess
INNER JOIN users AS user ON user.id = sess.user_id
WHERE user.equipment_id = 1 AND sess.datestart = CURDATE()

<强> Sql Fiddle