0

假设我有一张这样的桌子:

Id*|value

对于每个我想计算对应的存在Id多少次。value就像这个示例数据一样:

1, a
2, b
3, a 
4, b
5, c
6, a

我想:

1, a, 3
2, b, 2
3, a, 3
4, b, 2
5, c, 1
6, a, 3

这就是我现在所拥有的,我相信它正在工作,但它非常缓慢:

SELECT t1.Id, t1.value, COUNT(t2.value) FROM `table` AS t1
LEFT JOIN `table` AS t2 ON (t1.value = t2.value)
GROUP by t1.Id

我的表包含数千行。关于如何提高这种性能的任何建议?

4

3 回答 3

1

试试这个

SELECT t1.Id, t1.value, t2.cnt FROM Table1 AS t1
INNER JOIN 
(
  SELECT value, COUNT(value) as cnt 
    FROM Table1 GROUP BY value
) AS t2 ON (t1.value = t2.value)
ORDER BY t1.Id

或者

SELECT t1.id,t1.value,COUNT(t2.id) AS cnt FROM Table1 AS t1
INNER JOIN Table1 AS t2
   ON  t1.value = t2.value
GROUP BY t1.id,t1.value
ORDER BY t1.id
于 2013-07-23T14:33:52.457 回答
1

将其与自身运行的 GROUP BY 查询左连接:

SQL 小提琴在这里 - http://sqlfiddle.com/#!2/5b8f5/18

SELECT 
   tbl.id, tbl.value, cnts.counts FROM tbl
LEFT JOIN ( 
   SELECT value, COUNT(value) AS counts FROM tbl GROUP BY value
) AS cnts ON (tbl.value = cnts.value)
于 2013-07-23T14:34:51.013 回答
0
SELECT t1.Id, t1.value, t2.value FROM `table` AS t1
LEFT JOIN 
    (Select value, COUNT(value)` as value 
    from table` group by value) AS t2 
   ON      (t1.value = t2.value)
GROUP by t1.Id
于 2013-07-23T14:11:48.953 回答