Групповые комбинации столбцов, а не перестановок - PullRequest
5 голосов
/ 15 апреля 2011

На веб-сайте, над которым я работаю, пользователям разрешено отправлять данные в таблицу, и когда они отправляют данные, их просят указать имя партнера, поскольку два человека работают над получением данных. Я пытаюсь создать таблицу рекордов, перечисляя лучшие партнерские отношения, а также комбинацию (не перестановку) партнера и отправителя, которая чаще всего появляется в таблице.

Команда GROUP отлично подходит для этого, но я столкнулся с небольшим затруднением в связи с проблемой комбинации / перестановки. В настоящее время, когда я их группирую, он проверяет только перестановки отправителей и партнеров, а не комбинации. Проблема в том, что часто партнерство выбирает чередование между одним человеком, который является отправителем, а другой - партнером, поэтому у меня есть две возможные комбинации групп, которые я могу использовать.

В настоящее время у меня есть код, который получит одну таблицу рекордов перестановок «Податель» и «Партнер» и еще одну таблицу рекордов «Перестановка партнера» и «Податель». Мне нужно объединить эти результаты (возможно, не сгруппированные и не упорядоченные), когда партнер = отправитель или отправитель = партнер, а затем сгруппировать их и заказать в порядке убывания.

SELECT submitter, partner, COUNT(*) FROM submissions GROUP BY submitter, partner;

Приведенный выше код вернет таблицу с подсчетами конкретной перестановки отправителя и партнера, но если одни и те же два человека являются партнером и отправителем, только что переключенные, они не считаются одной и той же группой.

Кто-нибудь знает код для этого?

1 Ответ

6 голосов
/ 15 апреля 2011

Не самое симпатичное решение, но оно дает вам ответ, который вы хотите:

SELECT Person1, Person2, COUNT(*) FROM (
    SELECT 
        CASE WHEN submitter < partner THEN submitter ELSE partner END AS Person1,
        CASE WHEN submitter >= partner THEN submitter ELSE partner END AS Person2
    FROM submissions
) Q
GROUP BY Person1, Person2
...