私は、Person
多くの種類の を受け取ることができるを持っていますIncome
。稼いSUM
だ収入をIncome Type
、
+---------------+-----------------+
| INCOME TYPE | SUM AMOUNT |
+---------------+-----------------+
| Salary | $934.33 |
| Gambling | $27.99 |
| Tips | $584.00 |
+---------------+-----------------+
self::STAT
受け取った全体的な収入 ($1546.32) を提供するリレーショナル クエリを取得できましたが、 Income Type
.
その結果、次のように、モデルself::HAS_MANY
内でリレーショナル クエリとして実行しようとしています。Person
public function relations() {
return array(
'incomes_total' => array(
self::HAS_MANY,
'Income',
'person_id',
'select' => array('income_type_id', 'SUM(amount) AS total'),
'group' => "income_type_id"
));
}
これにより、次の SQL が生成されます。
SELECT
"incomes_total"."income_type_id" AS "t1_c5"
, SUM(amount) AS total
, "incomes_total"."id" AS "t1_c0"
FROM "stwd_income" "incomes_total"
WHERE ("incomes_total"."person_id"=:ypl0)
GROUP BY income_type_id
これは、必要なクエリに非常に近くなります。
私が理解できないのは, "incomes_total"."id" AS "t1_c0"
、そこに行が追加された理由です。私はそれをしたくありません。エラーが発生していCDbException
ます:
CDbCommand failed to execute the SQL statement:
SQLSTATE[42803]: Grouping error: 7 ERROR: column "incomes_total.id" must
appear in the GROUP BY clause or be used in an aggregate function.
必要なタイプのクエリを実現するにはどうすればよいですか?
更新 1: Active Record とカスタム SQL クエリの違いが明らかになり始めており、Active Record はそのようなタスクには適していない可能性があります。