2

我有以下结构的脚本:

SELECT SUM(CASE WHEN pf.info IS NOT NULL THEN 1 ELSE 0 END)
FROM summary s 
LEFT JOIN (SELECT id, info FROM items GROUP BY id) pf ON s.id=pf.id
GROUP BY s.date

我想要的是计算那些在“摘要”中并出现在“项目”中的 id。'items' 有相同的 id 重复多次,这就是我做 GROUP BY 的原因。

这个脚本可以按我的意愿工作,但是它非常慢,比直接执行 LEFT JOIN 慢得多(并且多次计算每个 id)。这似乎没有意义,因为我需要一个较小的子空间,它应该更容易。

所以问题是:如何重组查询以使其更快?

4

1 回答 1

3

使用count(distinct ...)

SELECT count(distinct s.id)
FROM summary s 
JOIN items i ON s.id = i.id


我不明白你为什么要分组s.date- 你的问题中没有关于为什么的线索,所以如果这不是一个错误并且你需要分组date,使用这个:

SELECT s.date, count(distinct s.id)
FROM summary s 
JOIN items i ON s.id = i.id
GROUP BY s.date
于 2012-09-21T02:08:16.133 回答