@lurulu

Как посчитать дубли записей бд по нескольким столбцам, но чтобы при этом в других столбцах были только уникальные значения?

Есть несколько таблиц

636bacbe2f391112855065.png

В рамках них мне надо получить

Задача 1:

Посчитать количество девайсов одного поколения, с одинаковыми параметрами, но разными цветами
636bb1498c2e6010309138.png
Объединить таблицы получается, затем ищу дубли по параметрам, а вот как посчитать дубли с разными цветами - не понимаю (distinct не работает)

Вот что написала:

SELECT d.color_id, generation_id, name, volume, capacity, type_of_connector FROM device
left join (SELECT device_id, GROUP_CONCAT(color_id separator ',') as color_id from device2color_body group by device_id) as d on d.device_id=device.id
where generation_id IN (SELECT generation_id from device group by generation_id having count(*)>1)
and name IN (SELECT name from device group by name having count(*)>1 )
and volume IN (SELECT volume from device group by volume having count(*)>1)
and capacity IN (SELECT capacity from device group by capacity having count(*)>1)
and type_of_connector IN (SELECT type_of_connector from device group by type_of_connector having count(*)>1)
order by generation_id, name;

Задача 2
Посчитать количество девайсов с одного покления, с одинаковыми наименованиями но разными параметрами volume, capacity и цвета.
  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Правильно я понимаю, что в случае 1 вы просто хотите получить количество разных цветов для устройств с одинаковым набором параметров?
SELECT `d`.`generation_id`, `d`.`Name`, `d`.`volume`, `d`.`capacity`,
       `d`.`type_of_connector`, COUNT(DISTINCT `c`.`color_id`) AS `color_count`
  FROM `device` AS `d`
  JOIN `device2color_body` AS `c` ON `c`.`device_id` = `d`.`id`
  GROUP BY `d`.`generation_id`, `d`.`Name`, `d`.`volume`, `d`.`capacity`,
           `d`.`type_of_connector`

2.
SELECT `generation_id`, `Name`, COUNT(*) AS `count`
  FROM (
    SELECT DISTINCT `d`.`generation_id`, `d`.`Name`, `d`.`volume`, `d`.`capacity`,
           `d`.`type_of_connector`, `c`.`color_id`
      FROM `device` AS `d`
      JOIN `device2color_body` AS `c` ON `c`.`device_id` = `d`.`id`
  ) AS `t`
  GROUP BY `generation_id`, `Name`
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы