2009-08-17 18 views
0

我有這個疑問:這個查詢爲什麼不起作用?

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(最高的國家之一)。當我從這個查詢中刪除count(id)時,它運行良好。

爲什麼這個計數不適用於這個查詢?

+0

您可以發佈您想要的結果集嗎? – Quassnoi 2009-08-17 11:18:00

回答

5

計數通常與GROUP BY配對。你試過GROUP BY date_id

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 
0

當你有一個像你的查詢次數,聚合函數未聚合的列有一組被提及按條款。原因在於,就你的查詢而言,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子句(因爲查詢只會返回一個排反正