0

特定の月に特定の金額を下回ったすべての顧客を取得し、クォータに達していない顧客のみを返す必要があるクエリがあります。

現在のクエリは次のとおりです。

SELECT cus.id, cus.email_address, COALESCE(SUM(credit_total),0) AS totalSpend
FROM customers AS cus
LEFT JOIN tasks_custs AS tsk ON tsk.user_id = cus.id
WHERE (
YEAR(date_ordered) = '2013'
AND MONTH(date_ordered) = '09'
AND paid = '1'
AND totalSpend < '300'
)

返されているエラーは、'where 句' の列 'totalSpend' が不明です。

私が疑問に思っているのは、単一の SQL クエリでやろうとしていることを達成できるか、それともすべての顧客を選択して PHP を使用して支出を確認する必要があるかということです。

必要な結果だけを mysql に返してもらいたいと思っていました。

4

2 に答える 2

3

HAVING集計関数を使用する場合は、代わりにキーワードを使用する必要がありますWHERE

SELECT cus.id, cus.email_address, COALESCE(SUM(credit_total),0) AS totalSpend
FROM customers AS cus
LEFT JOIN tasks_custs AS tsk ON tsk.user_id = cus.id
WHERE (
YEAR(date_ordered) = '2013'
AND MONTH(date_ordered) = '09'
AND paid = '1')
GROUP BY cus.id
HAVING SUM(credit_total) < 30

興味がある場合は、ここでとの違いの良い説明をご覧ください。しかし、簡単な要約が必要な場合は、私の言葉で言えば、次のようになります。WHEREHAVING

  • WHERE条件は、指定された条件でのグループ化の前に適用され、集計関数には適用できません
  • 一方、グループ化後にHAVING適用され、集計関数を使用して結果セットをフィルタリングできます。
于 2013-09-17T17:26:01.920 に答える
0

これはどのように機能しますか? データをグループ化した後に HAVING CLAUSE を追加したことを除いて、お客様と同じように顧客情報をグループ化し、合計を合計しました。

SELECT 
    cus.id, 
    cus.email_address, 
    COALESCE(SUM(credit_total),0) AS totalSpend
FROM customers AS cus
LEFT JOIN tasks_custs AS tsk 
    ON tsk.user_id = cus.id
WHERE
    YEAR(date_ordered) = '2013'
    AND MONTH(date_ordered) = '09'
    AND paid = '1'
GROUP BY 
    cus.id, 
    cus.email_address
HAVING COALESCE(SUM(credit_total),0) < '300'
于 2013-09-17T17:24:48.723 に答える