我有两个表,它们通过名为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
将检索两个不同的行:2
和1
,这也是错误的。
您可以查看SQLFiddle处的完整示例。
无论如何只能通过查询解决这个问题,还是需要按语言来解决?
答案 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 强>