簡體   English   中英

mysql 查詢:如何獲得每天的yes/no票數

[英]mysql query: how to get the number of yes/no votes per day

我必須創建一個 mysql 查詢以獲得超過特定日期的每一天的投票分布,就像這樣......

    date          yes_votes    no_votes
------------------------------------------
    2010-01-07    21           22
    2010-01-07    2            0

我的桌子是這樣的。。

    post_votes
--------------------------
    id(longint)
    date(timestamp)
    flag(tinyint) // this stores the yes/no votes 1-yes, 2-no

我被困在這個....

SELECT COUNT(*) AS count, DATE(date) FROM post_votes WHERE date > '2010-07-01' GROUP BY DATE(date)

這給出了每天的總票數,但不是我想要的分布。

SELECT COUNT(*) AS count
     , DATE(date)
     , SUM(flag = 1) AS yes_votes
     , SUM(flag = 2) AS no_votes
FROM post_votes 
WHERE date > '2010-07-01' 
GROUP BY DATE(date)

這是一個適用於 MySQL 的技巧,因為flag=1將是TrueFalse 但是 MySQL 中的True = 1False = 0 ,因此您可以使用SUM() function 添加 1 和 0。

使用IFCASE的其他解決方案會更好,或者如果您有任何機會將數據庫移動到另一個 RDBMS。

與問題無關的評論:

  • 使用datecount等保留字來命名字段或表是一個壞習慣。
  • 實際存儲時間戳時使用“日期”也不好。 名稱應反映用途。
  • 對於表名,建議使用單數 ( post_vote ) 而不是復數 - 盡管許多使用復數,但最終會讓人感到困惑。 復數適用於某些字段或計算字段,例如我們有計數的yes_votesno_votes

總結一下:

select date(date) as date,
       sum(case when flag = 1 then 1 else 0) as yes,
       sum(case when flag = 2 then 1 else 0) as no
from post_votes
where date > '2010-07-01'
group by date(date)

你幾乎是在解決方案:)

我建議在SUM方法中使用IF條件,如下所示:

SELECT SUM(IF(flag = 'yes',1,0)) AS yes_count,
       SUM(IF(flag = 'no',1,0)) AS no_count, 
       DATE(date) 
FROM post_votes 
WHERE date > '2010-07-01' 
GROUP BY DATE(date)

這將允許 function 僅在值等於是/ yesno每個總和加 1

SELECT DATE(date) as dt,
sum(if(flag=1,1,0)) as yes,
sum(if(flag=2,1,0)) as no
FROM post_votes WHERE date > '2010-07-01' 
GROUP BY dt

我也有這個問題。 我能想到的最佳解決方案是將“標志”拆分為兩個字段,例如:

upvote(tinyint)
downvote(tinyint)

然后你可以很容易地計算它們,而無需 mysql-voodoo:

SELECT 
  SUM(upvote) AS up,
  SUM(downvote) AS down,
  DATE(`date`) AS Created_at
FROM post_votes 
WHERE Created_at > '2010-07-01' 
GROUP BY Created_at

順便說一句:您不應該命名列date ,因為它是 MySQL 關鍵字。

暫無
暫無

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

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