我想得到' 0'在执行sql
查询时未找到任何记录。我尝试了很多像 ifnull(count(*),0)这样的东西,但没有给出我想要的结果。
查询如下:
SELECT chat_room_id,COUNT(*) FROM chat WHERE sender_id=13 GROUP BY chat_room_id
它给我的结果如下:
__________________________
| chat_room_id | Count(*) |
--------------------------
它不会返回任何' null'或者' 0' 0 ,所以我想得到' 0'或者' null'如果没有找到记录。
答案 0 :(得分:2)
只要表Chats
包含字段sender_id
,即使表中不存在sender_Id 13,以下内容也会返回一行。
set @sender = 13;
set @chats = (select count(*) from Chat where sender_id = @sender);
select @sender AS sender_id, IFNULL(@chats,0) AS Count_chats
;
答案 1 :(得分:0)
您的编辑更改后
试试这个:
SELECT distinct c1.chat_room_id,
(select count(*) from chat c2 c2.chat_room_id = c1.chat_room_id and c2.sender_id = 13)
FROM chat c1
注意:
一个名为CHAT的表我想包含数据库中的所有聊天记录,而不包含消息和发件人。
相反,如果您有一个名为CHAT_ROOM的表,其中包含所有聊天记录的列表,那么您的查询就会变为:
SELECT chat_room_id,
(SELECT COUNT(*)
FROM chat
WHERE chat.chat_room_id = chat_room.chat_room_id AND chat.sender_id = 13)
FROM chat_room
答案 2 :(得分:0)
您无法查询不在源表中或计算不可用的数据。
如果您的表格包含所有可用的聊天室,您可以使用该表格通过LEFT OUTER JOIN
SELECT
CR.chat_room_id,
COUNT(C.chat_room_id)
FROM
chat_rooms CR
LEFT JOIN chat C
ON CR.chat_room_id = C.chat_room_id
AND C.sender_id = 13 -- Moved from WHERE to keep all non-matching records from CR
GROUP BY
CR.chat_room_id
如果您没有特定的表格,可以使用LEFT OUTER JOIN
和subquery
来获得结果:
SELECT
CR.chat_room_id,
COUNT(C.chat_room_id)
FROM
(SELECT DISTINCT chat_room_id FROM chat) CR
LEFT JOIN chat C
ON CR.chat_room_id = C.chat_room_id
AND C.sender_id = 13 -- Moved from WHERE to keep all non-matching records from CR
GROUP BY
CR.chat_room_id
答案 3 :(得分:0)
您是否希望在发件人ID不存在的情况下返回所有chat_room_ids?
喜欢,如果说sender_id 9不存在,你想要返回什么?
如果你想要像
这样的话chat_room_id计数 NO_RECORDS 0
然后以下查询将起作用:
declare @Chat_Room_Id varchar(3),
@Count int
select @Chat_Room_Id = cast(chat_room_id as varchar(3)), @Count = count(*) from chat where sender_id=13 group by chat_room_id
select coalesce(@Chat_Room_Id, 'NO RECORDS') chat_room_id, coalesce(@Count, 0) count

如果我不明白,你能进一步澄清吗?
-hth Sourav
答案 4 :(得分:-2)
答案 5 :(得分:-2)
您可以将sql放在子查询中,这将始终返回一行
select sub.id,sub.counter from (select sender_id as id,count(*) as counter from chat where sender_id = 13) sub
如果没有记录,则返回0;如果有记录,则返回1.