Моей моделью 1 вино может быть много бутылок. Эти бутылки имеют поле output_type NULL или NOT NULL.SQLite count в левом запросе соединения
На самом деле, я могу рассчитывать бутылки, как это:
SELECT COUNT(DISTINCT(bottles.id)) AS total_bottles
FROM wines
LEFT JOIN bottles ON wines.id = bottles.wine_id AND bottles.status=1 AND bottles.output_type IS NULL
Это хорошо работает.
Но теперь мне нужно больше: я хочу считать, что бутылки хранятся (output_type NULL) И подсчитывают, что бутылки ушли (output_type NOT NULL) в том же запросе.
Так что мой ЛЕВЫЙ ПРИСОЕДИНЕНИЕ недостаточно, потому что я не могу считать бутылки хранящимися и бутылки ушли в основной запрос.
Я видел что-то подобное, в том числе «к югу от запроса» в LEFT JOIN:
LEFT JOIN (SELECT count(*) AS bottle_stored FROM bottles WHERE bottles.status=1 AND bottles.output_type IS NULL) AS total_stored ON wines.id = bottles.wine_id
Но это не работает. Если это работает, я могу дублировать LEFT JOIN, чтобы пересчитать оставшиеся бутылки.
EDIT: Дополнительные пояснения здесь. Это мой текущий запрос. Я могу считать все бутылки хранящимися (output_type IS NULL) для каждого вина.
SELECT wines.id, wines.winery
COUNT(DISTINCT(bottles.id)) AS total_bottles
FROM wines
LEFT JOIN bottles ON wines.id = bottles.wine_id AND bottles.status=1 AND bottles.output_type IS NULL
WHERE wines.status = 1
GROUP BY wines.id
EDIT 2 (DB схемы добавляется):
wines table
-----------
id (vc)
winery (vc)
name (vc)
status (int)
...
bottles table
-------------
id (vc)
wine_id (vc)
input_type (int)
input_date (datetime)
output_type (int)
output_date (datetime)
status (int)
...
Я хочу:
- перечислить все вина
- для подсчета бутылок, хранящихся (output_type NULL) для каждого вина список
- , чтобы считать бутылку упущенной (output_type NOT NULL) для каждого вина в списке
в этом же запросе.
Мои первичные и внешние ключи являются varchar, потому что это UUID (глобальная система синхронизации).
Нет ли отсутствующей ГРУППЫ? –
Да, я добавил. ;) –