2012-07-19 45 views
1

我有任何关于MySQL的特殊原因,不允许在WHERE中使用date_sent_at,同时允许它在GROUP BY为什么我不能在我的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_sent_at >= '2012-01-01' 
GROUP BY subtype, date_sent_at 

编辑:我知道,(当然)我可以DATE(om.sent_at) >= '2012-01-01'取代。

+0

否 - 应该工作。你的错误信息是什么? – Horen 2012-07-19 10:45:22

+0

@HERN未知列'date_sent_at'在'where子句'中。关于你的编辑 – gremo 2012-07-19 10:47:06

+0

:如果你知道你可能正在寻找答案@ user868766给你:http://dev.mysql.com/doc/refman/5.5/en/select.html – Horen 2012-07-19 10:54:17

回答

1

你不能在使用别名,但可以在组使用由

写在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: 

希望得到这个帮助。

1

问题是您使用DATE(om.sent_at) as date_sent_atAS部分将不在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 
1

无法使用WHERE子句中的别名。应使用完整句子DATE(om.sent_at) >

1

您不能在where子句中使用列别名,但可以在having子句中使用它们。在where子句

使用以下条件:

DATE(om.sent_at) > '2012-01-01' 
0

不能使用列别名你给SELECT列表列中的WHERE子句。你必须使用你用来构建列的表达式:

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 
相关问题