0

我有一个咨询我试图实现的问题:

SELECT [columns] FROM table1 LEFT/RIGHT JOIN table2 ON table1.id_user = table2.id  [WHERE clause] GROUP BY column

我希望这个咨询做的一个例子如下所示:

在 table1 中有这些记录:

编号 | id_user | 用户 | 价值

1 | 1 | 名称1 | 10

2 | 1 | 名称1 | 10

3 | 1 | 名称1 | 11

4 | 1 | 名称1 | 10

5 | 2 | 名称2 | 11

6 | 2 | 名称2 | 11

这在表 2 中:

编号 | 用户

1 | 名称1

2 | 名称2

我想获取给定值的每个用户存在多少条记录,例如,如果我们查找值 10 我想得到:

名称1 | 3

名称2 | 0

我已经尝试使用 LEFT 和 RIGHT JOIN 但没有用,我只是得到了这个,因为这是我猜想的唯一匹配 WHERE 子句的记录:

名称1 | 3

而不是 name2 的结果。

在把我的问题带到这里之前,我一直没有成功地寻找解决方案,希望有人可以帮助我解决这个问题:)

抱歉英语不好。我非常感谢您能提供的任何帮助

4

2 回答 2

0

不是最有效的查询,但这应该可以

select user, (select count(*) from table1 b where b.id_user=a.id and b.value=10)
from table2 a

通常,因为这个查询效率太低,我会在客户端加入结果,而不是尝试在 sql 中进行。这个过程会是这样的。

  1. 从表 2 中选择 *
  2. 选择 id_user, count(*) from table1 where value=10
  3. 遍历查询 #1 并将结果存储在一个可能看起来像的对象中{'user': name, 'count': 0}
  4. 遍历查询 #2 并更新步骤 #3 中的对象。

它总是取决于结果集的大小,可能还取决于所涉及的硬件,但通常这会更快,尽管在代码中编写起来相当复杂。

于 2013-02-25T23:37:38.367 回答
0

尝试这个。

SELECT t2.user,SUM(CASE WHEN t2.id=t1.id_user THEN 1 ELSE 0 END) AS TotalRecords 
FROM table2 t2
LEFT JOIN table1 t1 ON t2.id =t1.id_user
GROUP BY t2.id 
HAVING t1.value=10
于 2013-02-25T23:42:53.380 回答