Mysql 如何单独计算匹配的行数?
以下是我的表格结构:Mysql 如何单独计算匹配的行数?,mysql,sql,Mysql,Sql,以下是我的表格结构: -- qanda (stands for questions and answers) +----+---------+-----------------------------------------------+--------------+-----------+------+ | id | title | content | question_id | user_id | type
-- qanda (stands for questions and answers)
+----+---------+-----------------------------------------------+--------------+-----------+------+
| id | title | content | question_id | user_id | type |
+----+---------+-----------------------------------------------+--------------+-----------+------+
| 1 | title1 | this is a question | NULL | 213423 | 0 |
| 2 | NULL | this is an answer | 1 | 435344 | 1 |
| 3 | NULL | this is another answer | 1 | 432435 | 1 |
| 4 | title2 | this is another question | NULL | 124324 | 0 |
| 5 | NULL | this is an answer for the second question | 4 | 213423 | 1 |
| 6 | NULL | this is another answer for the first question | 1 | 213423 | 1 |
+----+---------+-----------------------------------------------+--------------+-----------+------+
我想分别计算问题和答案的数量。我该怎么做
此用户的预期结果::user_id=213423
我可以分别通过两个查询来实现这一点:
SELECT count(*) q_num FROM qanda WHERE user_id = :user_id AND question_id IS NULL
SELECT count(*) a_num FROM qanda WHERE user_id = :user_id AND question_id IS NOT NULL
我可以在一个查询中完成吗?您只需执行以下操作:
SELECT count(questionid) as q_num,
sum(questionid is null) as a_num
FROM qanda
WHERE user_id = :user_id ;
count with a column或expression统计非空值的数量—这正是您想要做的。MySQL在数字上下文中将布尔值视为整数,1表示真,0表示假
你也可以这样写:
(count(*) - count(questionid)) as a_num
或
编辑:
使用类型,可以使用变体:
select sum(type = 0) as q_num, sum(type = 1) as a_num
您只需执行以下操作:
SELECT count(questionid) as q_num,
sum(questionid is null) as a_num
FROM qanda
WHERE user_id = :user_id ;
count with a column或expression统计非空值的数量—这正是您想要做的。MySQL在数字上下文中将布尔值视为整数,1表示真,0表示假
你也可以这样写:
(count(*) - count(questionid)) as a_num
或
编辑:
使用类型,可以使用变体:
select sum(type = 0) as q_num, sum(type = 1) as a_num
尝试上面的查询
正如我在上面的查询中所写的,我使用了question_id为NULL,它将为true生成1,为false生成0,所以SUMquestion_id不为NULL将生成问题的精确计数
答案也是一样
尝试上面的查询
正如我在上面的查询中所写的,我使用了question_id为NULL,它将为true生成1,为false生成0,所以SUMquestion_id不为NULL将生成问题的精确计数
答案也是一样。使用带有CASE语句的SUM将实现这一点
SELECT SUM(CASE WHEN question_id IS NULL
THEN 1
ELSE 0
END) AS q_num,
SUM(CASE WHEN question_id IS NOT NULL
THEN 1
ELSE 0
END) AS a_num
FROM qanda
WHERE user_id = :user_id
用户_id的输出='213423'
SQL FIDLE:使用SUM和CASE语句将完成此任务
SELECT SUM(CASE WHEN question_id IS NULL
THEN 1
ELSE 0
END) AS q_num,
SUM(CASE WHEN question_id IS NOT NULL
THEN 1
ELSE 0
END) AS a_num
FROM qanda
WHERE user_id = :user_id
用户_id的输出='213423'
SQL FIDLE:将任何内容与NULL进行比较都会产生NULL。若要测试列是否包含NULL,请使用IS NULL或NOT NULL。将任何内容与NULL进行比较将生成NULL。要测试列是否包含NULL,请使用IS NULL或NOT NULL。在上次查询中,有两个a_num。其中一个应该是q_num。谢谢,upvote@MartinAJ . . . 这不是一个疑问。这是做同一件事的两种方法。好吧,我问的问题不够准确。实际上,我还有一个列名为type。它包含0个问题和1个答案。你能告诉我现在该怎么处理吗?很抱歉再次打电话给你,我认为回答的条件是多余的。您可以简单地将sumtype写为一个_num,而无需sumtype=1。我说的对吗?@MartinAJ。是的,你可以。然而,这似乎有点危险,因为可能会出现其他类型。如果列名为isAnswer,那么我会更确信该值始终为0或1。在您上次的查询中,有两个a_num。其中一个应为q_num。谢谢,upvote@MartinAJ . . . 这不是一个疑问。这是做同一件事的两种方法。好吧,我问的问题不够准确。实际上,我还有一个列名为type。它包含0个问题和1个答案。你能告诉我现在该怎么处理吗?很抱歉再次打电话给你,我认为回答的条件是多余的。您可以简单地将sumtype写为一个_num,而无需sumtype=1。我说的对吗?@MartinAJ。是的,你可以。然而,这似乎有点危险,因为可能会出现其他类型。如果该列被称为isAnswer,那么我更确信该值始终为0或1。