有sql语法的错误

时间:2016-08-08 07:41:42

标签: mysql group-by having

试图让这个查询起作用,但对我来说有点困难..

SELECT
    *, 
  COUNT(*) AS total FROM_UNIXTIME(consume_time,'%Y-%m') AS fecha
FROM
    coupon
HAVING
    fecha = '2016-07'
GROUP BY
    partner_id

1 个答案:

答案 0 :(得分:0)

  1. 您在,AS total之间的选择列表中遗漏了FROM_UNIXTIME

  2. HAVING过滤分组集,而WHERE过滤分组之前的记录 - 在这种情况下,您需要后者,但fecha之类的别名在{ {1}}子句被评估。因此,您需要在WHERE子句中重复基础表达式:

    WHERE

    然而,这种方法不可能 - 更好地将您的文字转换为可以直接过滤WHERE FROM_UNIXTIME(consume_time,'%Y-%m') = '2016-07' 的范围(特别是如果表上有索引):

    consume_time

    更好的是将WHERE consume_time >= UNIX_TIMESTAMP('2016-07-01') AND consume_time < UNIX_TIMESTAMP('2016-08-01') 存储为MySQL理解的时态数据类型,例如TIMESTAMP(恰好在内部存储为Unix时间戳),而不仅仅是整数 - 那么你就可以完全取消转换函数了:

    consume_time
  3. 由于您按WHERE consume_time >= '2016-07-01' AND consume_time < '2016-08-01' 进行分组,因此任何不依赖于函数的结果集列中的值都将是不确定的。这可能不是你想要的。您真的是要选择所有列,而是按partner_id分组吗?