我必須使用一張參考另一張的表格。這是代碼:
CREATE TABLE blogs (
article LONGTEXT,
id VARCHAR(255) PRIMARY KEY
);
CREATE TABLE blog_eval (
blog_id VARCHAR(255) REFERENCES blogs(id) ON DELETE CASCADE,
user_id VARCHAR(255) REFERENCES users(id),
is_like BOOLEAN, --true if like / false if dislike
PRIMARY KEY (blog_id, user_id)
);
我需要讓所有博客都有兩個額外的列:喜歡的總和和不喜歡的總和。
我不太確定如何將 JOIN 與 COUNT-Function 結合起來,并添加邏輯來區分喜歡和不喜歡。
我正在使用 MySQL。
謝謝你的幫助!
uj5u.com熱心網友回復:
一種選擇使用條件計數:
select b.*, e.cnt_dislike, e.cnt_dislike
from blogs b
left join (
select blog_id, sum(is_like) cnt_like, sum(1 - is_like) cnt_dislike
from blog_eval
group by blog_id
) e on e.blog_id = b.id
由于is_like是布林值(本質上是整數),因此運算式sum(is_like)計算真實值。在子查詢中進行預聚合可能有助于提高效率。
在最近的 MySQL 版本 (>= 8.0.14) 中,我們可以使用橫向連接來表達這一點,這可能會表現得更好:
select b.*, e.*
from blogs b
left join lateral (
select sum(e.is_like) cnt_like, sum(1 - e.is_like) cnt_dislike
from blog_eval e
where e.blog_id = b.id
) e on 1 = 1
uj5u.com熱心網友回復:
加入這兩個表,并使用SUM()來合計喜歡和不喜歡。
SELECT b.id, SUM(e.is_like) AS likes, SUM(NOT e.is_like) AS dislikes
FROM blogs AS b
LEFT JOIN blog_eval AS e ON e.blog_id = b.id
GROUP BY b.id
uj5u.com熱心網友回復:
您不能從一張表中獲取所需的所有資料嗎?
SELECT blog_id, is_like, count(*)
FROM blog_eval
GROUP BY blog_id, is_like;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/530830.html
