簡體   English   中英

mysql 中的 Count() 算法

[英]Count() arithmetic in mysql

我有兩張桌子:

comments (
  id        int
  comment   int
)

commentvotes (
  commentid int
  positive  bool
)

其中commentvotes.positive 確定投票是贊成票還是反對票。

有沒有什么辦法,通過一個查詢,我可以得到所有的贊成票和反對票,理想情況下是在一個列中? 更一般地說,您可以在同一個查詢中使用不同的選擇標准運行兩個計數嗎?

你可以用SUM做一些愚蠢的把戲:

SELECT commentid, SUM(positive) upvotes, SUM(NOT positive) downvotes FROM commentvotes;

MySQL 布爾值實際上只是整數,0 或 1。將它們相加有效地計算了條件為真的次數。 因此,如果您有:

commentid | positive
----------|---------
 1        |  true
 1        |  true
 1        |  false
 1        |  true
 1        |  false

那么SUM(positive)1+1+0+1+0 = SUM(NOT positive)0+0+1+0+1 = 2。你也可以在其他數據庫中這樣做,但通常需要一個顯式演員表。

一個警告:因為 MySQL 沒有真正的 boolean 類型,所以您的positive列實際上是TINYINT(1) ,並且可以包含任何適合一個字節的數字,這將拋出SUM(positive) 您可以使用SUM(NOT NOT positive)或演員表,或使用不會對您撒謊的數據庫。 ;)

如果這對您來說太神秘了(理所當然),那么簡單的方法是進行一些非規范化並給出comments upvotesdownvotes列。 或者您可以使用一個子查詢來表示贊成,另一個用於反對,但根據我的經驗,MySQL 在分組操作和子查詢方面特別糟糕。

暫無
暫無

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

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