Лучший способ сделать «глобальное» GROUP BY поле, которое хранится как `field1`,` field2` - PullRequest
1 голос
/ 05 декабря 2011

То, что у меня есть, это таблица с разными полями и среди них поля, которые называются category1, category2.Допустим, там хранятся некоторые данные

(cat1, cat2), (cat2, cat1), (cat3, cat1), (cat3, cat4), (cat1, cat2), (cat2, cat3)

Строка не может иметь дублирующихся категорий, т.е. (cat1, cat1) невозможна.Есть ли простой способ получить вывод, подобный этому

(cat1, 4), (cat2, 4), (cat3, 3), (cat4, 1)

Что я сейчас делаю, это

(SELECT category1 AS category UNION ALL SELECT category2 AS category) AS tmp

, а затем я имею дело с этой таблицей tmp и группирую ее по ней.Проблема в том, что я не могу найти способ оптимизировать его.Итак, вопрос: можете ли вы придумать какой-нибудь лучший способ сделать выборку выше, который позволил бы мне использовать индексы?Если нет, то единственный ли способ сделать это - создать эту таблицу tmp и проиндексировать ее?

Ответы [ 2 ]

2 голосов
/ 05 декабря 2011
SELECT fieldname, SUM(cnt)
FROM (
    SELECT category1 AS fieldname, COUNT(category1) AS cnt
    FROM yourtable
    GROUP BY category1

    UNION ALL

    SELECT category2 AS fieldname, COUNT(category2) AS cnt
    FROM yorutable
    GROUP By category2
) AS child
GROUP BY fieldname
0 голосов
/ 05 декабря 2011
select distinct category1, category2 
from   myTable
group by category1, catgeory2
...