1

inを許可しているのに MySQL がdate_sent_atinの使用を許可していないことについて、何か特別な理由がありますか?WHEREGROUP BY

SELECT
    CONCAT(type, '_', IF(om.is_auto, 'auto', 'user')) AS subtype,
    DATE(om.sent_at) AS date_sent_at,
    COUNT(om.id) AS sends
FROM outgoing_message om INNER JOIN outgoing_message_customers AS omc
    ON om.id = omc.outgoing_message_id
WHERE
    omc.customer_id = 2
    AND
    om.status <> 'pending'
    AND
    date_sent_at >= '2012-01-01'
GROUP BY subtype, date_sent_at

編集:(もちろん)私はDATE(om.sent_at) >= '2012-01-01'.

4

6 に答える 6

1

WHERE 句でエイリアスを使用することはできません。完全な文を使用する必要がありますDATE(om.sent_at) >

于 2012-07-19T10:49:45.380 に答える
1

where 句では列エイリアスを使用できませんが、having 句では代わりに使用できます。

where 句で次の条件を使用します。

DATE(om.sent_at) > '2012-01-01'
于 2012-07-19T10:49:59.510 に答える
1

where ではエイリアスを使用できませんが、GROUP BY では使用できます

ここのmysqlドキュメントに書かれているように:

A select_expr can be given an alias using AS alias_name. The alias is used as the expression's column name and can be used in GROUP BY, ORDER BY, or HAVING clauses. For example:

この助けを願っています。

于 2012-07-19T10:51:26.367 に答える
1

問題は、使用することですDATE(om.sent_at) as date_sent_at。そのAS部分はWHERE句では機能しませんが、GROUP BYステートメントでは機能します。

これを試して:

SELECT
CONCAT(type, '_', IF(om.is_auto, 'auto', 'user')) AS subtype,
DATE(om.sent_at) as date_sent_at,
COUNT(om.id) as sends
FROM outgoing_message om INNER JOIN outgoing_message_customers AS omc
ON om.id = omc.outgoing_message_id
WHERE
omc.customer_id = 2 and om.status <> 'pending'
AND
DATE(om.sent_at) > '2012-01-01'
GROUP BY subtype, date_sent_at
于 2012-07-19T10:48:56.097 に答える
0

date_sent_at はエイリアス名です。where 句で DATE(om.sent_at) を指定する必要があります

SELECT ステートメントの操作の順序を確認し てください

于 2012-07-19T10:49:14.163 に答える
0

WHERE 句の SELECT リストで列に指定した列エイリアスを使用することはできません。列の作成に使用した式を使用できます。

SELECT        CONCAT(type, '_', IF(om.is_auto, 'auto', 'user')) AS subtype,
              DATE(om.sent_at) as date_sent_at,
              COUNT(om.id) as sends
FROM          outgoing_message om 
INNER JOIN    outgoing_message_customers AS omc
ON            om.id = omc.outgoing_message_id
WHERE         omc.customer_id = 2
AND           om.status <> 'pending'
AND           DATE(om.sent_at) >= '2012-01-01'
GROUP BY      subtype, date_sent_at
于 2012-07-19T10:50:19.613 に答える