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

それ自体で実行されている 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 に答える
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 に答える
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 に答える