如果在COUNT(*)查询中找不到记录,则返回0在MYSQL中
如果在执行sql
查询时未找到任何记录,我希望得到'0'。我尝试了很多东西,如ifnull(count(*),0),但没有给我我想要的结果。如果在COUNT(*)查询中找不到记录,则返回0在MYSQL中
查询是如下提到:
SELECT chat_room_id,COUNT(*) FROM chat WHERE sender_id=13 GROUP BY chat_room_id
它给了我如下的结果:
__________________________
| chat_room_id | Count(*) |
--------------------------
它不返回任何“空”或“0”,所以我想' 0'OR'null'如果没有找到记录。
只要因为有一个表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
;
嘿,谢谢它为我工作。 – ckpatel 2014-09-30 09:23:59
很高兴,猜你会为chat_room_id调整它,干杯 – 2014-09-30 09:25:08
后,您的编辑改变
试试这个:
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_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
您不能查询不在源表中或计算中不可用的数据。
如果你有一个包含所有可用的聊天室的桌子,你可以使用该表使用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
您是否在寻找返回所有的情况下,发件人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
不应该查询是SELECT chat_room_id,COUNT(*)FROM聊天WHERE SENDER_ID = 13 GROUP BY chat_room_id – Satya 2014-09-30 08:03:29
即使发件人13你想有一个返回的记录不存在? – 2014-09-30 08:16:30
对不起,我编辑了我的问题,它是chat_room_id而不是sender_id。 – ckpatel 2014-09-30 08:37:54