EVERY()
のエミュレート CASE
を使用 およびSUM()
実際、この記事では、EVERY()
の方法について説明します。 CASE
を介してエミュレートできます およびSUM()
。次の2つのステートメントは同等です。
SELECT EVERY(id < 10)
FROM book
SELECT CASE SUM(CASE WHEN id < 10 THEN 0 ELSE 1 END)
WHEN 0 THEN 1
ELSE 0
END
FROM book;
EVERY()
についても同じことが言えます。 ウィンドウ関数:
SELECT
book.*,
EVERY(title LIKE '%a') OVER (PARTITION BY author_id)
FROM book
SELECT
book.*,
CASE SUM(CASE WHEN title LIKE '%a' THEN 0 ELSE 1 END)
OVER(PARTITION BY author_id)
WHEN 0 THEN 1
ELSE 0
END
FROM book;
SQL標準
SQL:2008
標準では、EVERY
について言及しています 集計関数:
10.9 <aggregate function>
[...]
<aggregate function> ::=
COUNT <left paren> <asterisk> <right paren> [ <filter clause> ]
| <general set function> [ <filter clause> ]
| <binary set function> [ <filter clause> ]
| <ordered set function> [ <filter clause> ]
<general set function> ::=
<set function type> <left paren> [ <set quantifier> ]
<value expression> <right paren>
<set function type> ::=
<computational operation>
<computational operation> ::=
AVG
| MAX
| MIN
| SUM
| EVERY
| [...]
ただし、「高度な」SQL標準機能は、データベースによって実装されないことがよくあります。 Oracle 11g たとえば、それをサポートしていません。また、 SQL Server2012> 。
HSQLDB
を使用 しかし、あなたはもっと幸運かもしれません。 HSQLDB 2.xは非常に標準に準拠しており、MySQLはBIT_AND()
を認識しています
EVERY()
の非標準エイリアスである集計関数 、Postgresでもサポートされています。
一部のデータベースではユーザー定義の集計関数を記述できるため、EVERY()
を実装することもできます。 自分で。