10

奇妙なエラーが発生しています。次のようなSQLコードがあります。

SELECT 
    adverse_reaction_type_id,
    SUM(CASE adverse_reaction_type_id WHEN 1 THEN `number` ELSE 0 END ) line, 
    SUM(CASE adverse_reaction_type_id WHEN 2 THEN `number` ELSE 0 END ) drug 
FROM
    core_reports_adverse_reactions, 
    ...
WHERE 
    ...

これは、私の MAMP インストールでは正常に機能しますが、リモート サーバーでは機能しません。どこかに設定オプションがあり、動作を停止していると思います。

これは私が得ているエラーです:

GROUP BY 句がない場合、GROUP 列のない GROUP 列 (MIN()、MAX()、COUNT()、...) の混合は不正です。

エラーが何を伝えているかはわかっていますが、問題は、何かでグループ化したくないということです。where ビット (簡潔にするために上記で削除) が一致するすべての結果を取得しSUM()number列の を (句に基づいて、またはいずれlineかとして) 返したいと考えています。drugCASE

したがって、本質的に、句に一致するものに関係なく、WHERE私が返したいのは1行だけです:

line | drug
-----------
10   | 32

これを回避する方法はありますか?または何かできる方法はありますGROUP BY nothingか?

4

1 に答える 1

9

GROUPを実行するテーブルの定数を BYできますSELECT

GROUP BY NULL:

mysql> select SUM(CASE WHEN product_id = 0 THEN -1 ELSE product_id END) AS sumprod, SUM(quantity) AS sumquant FROM orders GROUP BY NULL;
+---------+----------+
| sumprod | sumquant |
+---------+----------+
|       4 |        8 |
+---------+----------+
1 row in set (0.00 sec)

mysql> select version();
+-------------+
| version()   |
+-------------+
| 5.5.25a-log |
+-------------+
1 row in set (0.00 sec)

ただし、通常、このエラーは、グループ化されていない列が少なくとも 1 つあることを意味します。

集計関数内での CASE の使用により、MySQL の製品バージョンがびっくりする可能性があります。

于 2012-09-20T14:58:02.783 に答える