Генерация отчета напрямую из данных Mysql Query (используя groupby, count)

У меня есть две таблицы для хранения изображений и связанных с ними данных EXIF:

image_table имеет записи, как показано ниже:

(query: select * from image_table where order_id = 3030303)

введите описание изображения здесь

image_exif_info таблица имеет записи, как показано ниже:

(query: select * from image_exif_info where
image_id in (select image_id from image_table where order_id = 3030303)

введите описание изображения здесь

Как отмечено на втором скриншоте, меня интересует Make а также Model поля.

То, что я хотел сделать, это написать запрос, который покажет мне такие данные (REPORT):

Make          Model              # of photos
Canon         CanonEOS 400D      (200)
Nikon         Nikon D3200        (120)
....          .....              ....

Я знаю, что могу написать запрос и выполнить цикл, подсчитать и т. Д., Чтобы получить этот отчет. Однако я очень стараюсь улучшить свои навыки SQL, поэтому я пытаюсь создать этот отчет, используя один запрос.

До сих пор я получил это далеко:

select distinct i.value,count(i.image_id) from image_exif_info i
where (i.key ='Make' or i.key = 'Model')
and i.image_id in (select image_id from image where order_id =303030)
group by value

Результат запроса выше:

Canon                 200
CanonEOS 400D         200
Nikon                 120
Nikon D3200           120

Я хотел бы, чтобы это было идентично тому, что я показал выше под (ОТЧЕТ)

0

Решение

Вот один из способов сделать это, используя подзапрос таблицы.

SELECT exif.Make, exif.Model, COUNT(i.image_id) AS "# of photos"FROM image_table i
INNER JOIN (SELECT x.image_id,
MAX(CASE WHEN x.`key`='Make' THEN x.`value` ELSE '' END) AS Make,
MAX(CASE WHEN x.`key`='Model' THEN x.`value` ELSE '' END) AS Model
FROM image_exif_info x
WHERE x.`key` IN ('Make','Model')
GROUP BY x.image_id) exif
ON i.image_id = exif.image_id
GROUP BY exif.Make, exif.Model;

SQLFiddle: http://sqlfiddle.com/#!9/38dc4/11

Подзапрос — это стержень, который дает каждый image_id, марку и модель. Затем он присоединяется к image_table посредством image_id и группируется по марке и модели.

1

Другие решения

Других решений пока нет …