Я создаю простой браузер изображений, который подключен к базе данных SQLite.В браузере похожие изображения сгруппированы в событие , и каждое изображение помечено несколькими тегами .
Кто-то помог мне сконструировать этоочень полезный запрос ниже.В качестве примера он содержит 5 случайных тегов:
SELECT *
FROM
(SELECT
t.EventId,
SUM(CASE WHEN name = 'necktie' THEN 1 ELSE 0 END) as 'necktie',
SUM(CASE WHEN name = 'shirt' THEN 1 ELSE 0 END) as 'shirt',
SUM(CASE WHEN name = 'suit' THEN 1 ELSE 0 END) as 'suit',
SUM(CASE WHEN name = 'man' THEN 1 ELSE 0 END) as 'man',
SUM(CASE WHEN name = 'male' THEN 1 ELSE 0 END) as 'male'
FROM
TagsMSCV t
WHERE
name IN ('necktie', 'shirt', 'suit', 'man', 'male')
GROUP BY
t.EventId)
ORDER BY
COUNT(*) DESC
Возвращает, сколько из каждого тега (столбца называется «имя») отображается в каждом событии.Однако теперь мне также нужен размер события (количество уникальных идентификаторов изображений в событии), который можно выполнить с помощью следующего запроса:
SELECT EventId, COUNT(DISTINCT ImageId)
FROM TagsMSCV
GROUP BY EventId
Но я понятия не имею, как ввести этот синтаксис вподзапрос выше?Если я поставлю его рядом с t.EventId
, он будет считать только идентификаторы изображения в случае, если они помечены 5 случайными тегами, что неверно.Мне нужно общее количество уникальных идентификаторов изображений в этом событии.