我有这个问题:
select count(id) AS num,date_id from table
where FROM_UNIXTIME(date_id,'%d-%m-%Y')='17-08-2009' order by date_id DESC;
这应该导致在今天的日期发布所有id,但它只给出一个id(最高的id)。当我从此查询中删除count(id)
时,它运行正常。
为什么此计数不适用于此查询?
答案 0 :(得分:5)
计数通常与GROUP BY配对。你试过GROUP BY date_id
吗?
答案 1 :(得分:1)
如果您想选择日期的总计数以及每个date_id
:
SELECT date_id, num
FROM (
SELECT COUNT(id) AS num
FROM table
WHERE date_id >= UNIX_TIMESTAMP('17-08-2009')
AND date_id < UNIX_TIMESTAMP('18-08-2009')
)
CROSS JOIN
table
WHERE date_id >= UNIX_TIMESTAMP('17-08-2009')
AND date_id < UNIX_TIMESTAMP('18-08-2009')
ORDER BY
date_id DESC
答案 2 :(得分:0)
如果在查询中有像COUNT这样的聚合函数,则必须在group by子句中提及任何未聚合的列。这样做的原因是,随着查询的出现,SQL的执行语义并没有多大意义。
这应该适合你:
select count(id) AS num,date_id
from table
where FROM_UNIXTIME(date_id,'%d-%m-%Y')='17-08-2009'
group by date_id
order by date_id DESC;
此外,由于您刚刚从一个日期开始,因此您不需要order by子句(因为查询只会返回一行。