-1

削除されていないすべてのメモと削除されていないメモを特定の値でカウントするリクエストがあります。

SELECT
    catalogs.id AS id,
    COUNT(DISTINCT t.id) AS total,
    COUNT(DISTINCT c.id) AS closed
FROM catalogs
LEFT JOIN links t ON catalogs.id = t.catalog
LEFT JOIN links c ON catalogs.id = c.catalog
WHERE catalogs.removed = 0
    AND ( t.removed = 0 OR t.removed is NULL )
    AND ( c.removed = 0 OR c.removed is NULL )
    AND ( c.is_open = 0 OR c.is_open is NULL )
GROUP BY catalogs.id
ORDER BY catalogs.id;

しかし、responce では、total = 0 のメモ、または c.is_open = 0 のメモが少なくとも 1 つ存在する場所のみを見ることができます。

upd 0:私はSQLにあまり詳しくありませんが、問題を解決しようとしていた方法に気づきました...恥ずかしいです:(

upd 1: SUM() を使用してこのクエリを作成する別の (回答の最初の) 方法があります。構文は次のとおりです。

SUM(case when links.removed = 1 then 1 else 0 end) AS removed

私にとっては、こちらの方が簡単です。

4

1 に答える 1