2012-09-20 8 views
7

私は奇妙なエラーが発生しています。SUM()すべての結果(group by節なし)

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のインストールで正常に動作しますが、私のリモートサーバー上にない:私は次のようになりますSQLコードを持っています。私はそこに設定オプションがどこかで動作して停止していると仮定します。

この

は私が取得していますエラーです:GROUP列の

ミキシング(MIN()、MAX()、COUNT()、...)なしGROUP 列を持つがある場合は違法です句

BY何GROUPは、私はエラーが私に言っているのか分からないが、問題は、私は何もして、グループにしたくないということです。すべての結果を得るには、whereビット(簡潔にするために上記で削除されたもの)が一致してから、列のSUM()を返します(CASE節に基づいてlineまたはdrugとして)。

ので、基本的にかかわらず、WHERE句でにマッチしているものの私は返すようにしたいすべてが行です:

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

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

+1

これは部分的な回答にすぎないので、このエラーは 'ONLY_FULL_GROUP_BY' SQLモードが有効な場合にのみ発生します([http://dev.mysql.com/doc/refman/5.6/ en/group-by-hidden-columns.html](http://dev.mysql.com/doc/refman/5.6/ja/group-by-hidden-columns.html))、あなたのMAMPインストールの違いあなたのリモートサーバはあなたのMAMPインストールでSQLモードを有効にしていないかもしれません。 – ruakh

答えて

7

GROUPSELECTを実行するテーブルの定数でBYを指定できます。例えば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つの列が存在することを意味します。

MySQLのプロダクションバージョンは、集約関数内でCASEを使用することによって不用意になっている可能性があります。

+0

ああ、私はあなたが何を意味するかを見て、それはエラーを意味する。私は実際には、より読みやすくするために巨大なSQLクエリを削減し、いくつかの "選択"列を削除していた彼らは関連性がなかったと思った。私は質問を再編集しましたが、今は私の主な質問から 'id'フィールドを取り出してうまくいきます! :)ありがとう! –

+0

できる場合は受け入ります) –

+0

定数ではありません。整数にすることはできません。 –