簡體   English   中英

mysql按天分組,計數多種類型的記錄

[英]mysql group by day with count multi types of records

我有一個id | type | publishedonid | type | publishedon id | type | publishedon id | type | publishedon類型可能是1,2,3或4(int)值,我現在想每天選擇使用的帖子

SELECT FROM_UNIXTIME( `publishedon` , "%Y-%m-%d" ) AS `day` , count( id ) AS listings,
TYPE FROM posts
WHERE (
FROM_UNIXTIME( publishedon ) >= SUBDATE( NOW( ) , 30 )
)
GROUP BY `day`

結果

day     listings
2013-09-02  17
2013-09-05  105

我想讓清單更詳細地歸檔

day     type_1   type_2   type_3   type_4
2013-09-02  10      4       6        3
2013-09-05  6      4       1        3

您只需要放入所有type值:

SELECT 
  FROM_UNIXTIME( `publishedon` , "%Y-%m-%d" ) AS `day`, 
  count(id) AS listings,
  (SELECT COUNT(id) FROM `posts` WHERE `type`=1 AND FROM_UNIXTIME(`publishedon`, "%Y-%m-%d")=`day`) AS `type_1`,
  (SELECT COUNT(id) FROM `posts` WHERE `type`=2 AND FROM_UNIXTIME(`publishedon`, "%Y-%m-%d")=`day`) AS `type_2`,
  (SELECT COUNT(id) FROM `posts` WHERE `type`=3 AND FROM_UNIXTIME(`publishedon`, "%Y-%m-%d")=`day`) AS `type_3`,
  (SELECT COUNT(id) FROM `posts` WHERE `type`=4 AND FROM_UNIXTIME(`publishedon`, "%Y-%m-%d")=`day`) AS `type_4`
FROM 
  `posts`
WHERE
  FROM_UNIXTIME(`publishedon`) >= SUBDATE(NOW(), 30)
GROUP BY 
  `day`

但實際上,由於有條件的功能,這樣做的速度會很慢。 如果僅是格式化問題,則最好執行以下操作:

SELECT 
  FROM_UNIXTIME(`publishedon`, "%Y-%m-%d" ) AS `day`, 
  `type`,
  count( id ) AS listings,
FROM 
  `posts`
WHERE
-- this should be better evaluated in application 
-- since will not produce index using too:
  FROM_UNIXTIME(`publishedon`) >= SUBDATE(NOW(), 30)
GROUP BY 
  `day`,
  `type`

然后在應用程序內部創建所需的格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM