[英]Mysql: How to SELECT only where column (accepted) is = 1?
這是我的代碼,除非我僅想限制它以僅過濾來自好友表的“已接受”,否則它會正確顯示,即= 1。
SELECT users.id, users.username, users.avatar, COUNT(friends.accepted) AS friends
FROM users
LEFT JOIN friends ON friends.user1=users.username || friends.user2=users.username
GROUP BY users.username
ORDER BY friends DESC LIMIT 20
如果只想讓一個朋友接受一個人,請使用HAVING
(為簡單HAVING
, HAVING
等效於WHERE
來過濾聚合結果):
SELECT users.id, users.username, users.avatar, COUNT(*) AS friends
FROM users
LEFT JOIN friends ON friends.user1=users.username || friends.user2=users.username
GROUP BY users.username
HAVING COUNT(friends.accepted) = 1
ORDER BY friends DESC LIMIT 20
如果您要計算接受的朋友數= 1,則應該使用簡單的WHERE
:
SELECT users.id, users.username, users.avatar, COUNT(*) AS friends
FROM users
LEFT JOIN friends ON friends.user1=users.username || friends.user2=users.username
WHERE friends.accepted = 1
GROUP BY users.username
ORDER BY friends DESC LIMIT 20
或者,如果您還想列出沒有朋友的人,那么他們被接受= 1:
SELECT users.id, users.username, users.avatar,
SUM(CASE friends.accepted = 1 THEN 1 ELSE 0 END) AS friends
FROM users
LEFT JOIN friends ON friends.user1=users.username || friends.user2=users.username
GROUP BY users.username
ORDER BY friends DESC LIMIT 20
使用具有規則的檢查條件來確認接受的計數是否為1
SELECT users.id, users.username, users.avatar, COUNT(friends.accepted) AS friends
FROM users
LEFT JOIN friends ON friends.user1=users.username || friends.user2=users.username
GROUP BY users.username
having count(friends.accepted)=1
ORDER BY friends DESC LIMIT 20
COUNT(columnname)
計算columnname不為null的所有記錄。 因此,您不想使用COUNT(friends.accepted)
,因為0和1都不為空,因此您要計算所有朋友是否接受。
請改用SUM來計算所有接受的= 1。 如果用戶根本沒有朋友,那么您將獲得NULL。 在這種情況下,請使用COALESCE將NULL設置為零,如果這會打擾您的話。
SELECT
users.id,
users.username,
users.avatar,
COALESCE(SUM(friends.accepted),0) AS friends
FROM users
LEFT JOIN friends ON users.username IN (friends.user1, friends.user2)
GROUP BY users.id
ORDER BY friends DESC LIMIT 20;
(在您只對接受的朋友感興趣的簡單查詢中,您當然可以在ON子句中簡單地添加AND accepted = 1
,以便僅獲取接受的朋友並使用COUNT
。)
另一種方法是在子查詢中計數:
SELECT id, username, avatar,
(
select count(*)
from friends
where users.username in (friends.user1, friends.user2)
and friends.accepted = 1
) as friends
FROM users
ORDER BY friends DESC LIMIT 20;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.