MySQL: добавить несколько столбцов после GROUP BY? - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь сделать следующее:

SELECT 
  customer_entity.email,
  customer_entity.website_id 
FROM
  customer_entity 
  INNER JOIN 
    (SELECT 
      email 
    FROM
      customer_entity 
    GROUP BY email 
    HAVING COUNT(email) > 1) dupes 
    ON customer_entity.email = dupes.email  
GROUP BY customer_entity.`entity_id` 
ORDER BY customer_entity.email ;

Выше запроса возвращает результат ниже:

email               website_id
abe@abc.com             1
abe@abc.com             2
abe@abc.com             3
abe@abc.com             4
test@abc.com            1
test@abc.com            2
test@abc.com            4
xyz@abc.tv              1
xyz@abc.tv              2
xyz@abc.tv              3

Но я хочу данные в следующем формате:

email           website1    website2    website3    website4

abe@abc.com         1           2           3           4 
test@abc.com        1           2           null        4
xyz@abc.tv          1           2           3           null

возможно ли в этом случае?

Спасибо

1 Ответ

1 голос
/ 30 апреля 2020

Вы можете выполнить условное агрегирование:

select
    email,
    max(website_id = 1) website_1,
    max(website_id = 2) website_2,
    max(website_id = 3) website_3,
    max(website_id = 4) website_4
from customer_entity
group by email
having count(*) > 1
order by email

Обратите внимание, что это упрощает ваш исходный запрос - здесь не требуется самостоятельное объединение.

Кроме того, это помещает значения 0/1 в каждый столбец, который указывает, существует ли данный адрес электронной почты для этого веб-сайта - я считаю, что это более важно, чем повторение идентификатора веб-сайта в столбце.

...