[英]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
upvotes
和downvotes
列。 或者您可以使用一個子查詢來表示贊成,另一個用於反對,但根據我的經驗,MySQL 在分組操作和子查詢方面特別糟糕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.