Возникла проблема при попытке сравнить количество из двух таблиц (используя SQLite).
Предположим, у меня есть такие таблицы, как:
Объекты (NumId равен Основной ключ)
NumId | Категория_объекта |
---|---|
1 | постоянный |
2 | заимствованный |
3 | заимствованный |
4 | заимствованный |
5 | заимствованный |
заимствовано (NumObj — это Внешний ключ/первичный ключ, ссылающийся на таблицу объектов)
NumObj | Collection_name |
---|---|
2 | коллекция_альфа |
3 | collection_betha |
4 | collection_betha |
5 | collection_betha |
Запрос, который мне нужно выполнить:
"What are the collections with higher number of borrowed objects than quantity of permanent objets?"
Моя текущая попытка:
SELECT Collection_name FROM Borrowed
WHERE (SELECT COUNT(Collection_name) FROM Borrowed)>
(SELECT COUNT(*) FROM Objects WHERE Object_category =
'permanent')
Он возвращает значения из столбца, но не работает должным образом (должен был вернуть «коллекцию_бета» для владения 3 объектами, что больше, чем количество существующих постоянных объектов, равное 1).
Я бы использовал здесь условную агрегацию:
SELECT b.Collection_name
FROM Borrowed b
INNER JOIN Objects o
ON o.NumId = b.NumObj
GROUP BY b.Collection_name
HAVING SUM(o.Object_category = 'borrowed') > SUM(o.Object_category = 'permanent');
Может присоединение поможет
SELECT Borrowed.Collection_name
FROM Borrowed
JOIN Objects
ON Objects.NumId= Borrowed.NumObj
GROUP BY Borrowed.Collection_name
HAVING COUNT(NumObj) >
(SELECT COUNT(*) FROM Objects WHERE Object_category = 'permanent')
Вы можете условно подсчитать соединение, чтобы получить оба числа.