MySQL IF 语句然后 COUNT 列中的值[重复]

Posted

技术标签:

【中文标题】MySQL IF 语句然后 COUNT 列中的值[重复]【英文标题】:MySQL IF statement then COUNT value in column [duplicate] 【发布时间】:2019-07-27 02:41:33 【问题描述】:

我是 mysql 新手(使用 SQLite)并且正在处理更复杂的查询

假设我的数据库类似于

tablename = "stages"

id | results | stage    | parent_id
1  | no      | 'stage1' | 1
2  | no      | 'stage1' | 1
3  | yes     | 'stage1' | 2
4  | no      | 'stage2' | 2

我正在尝试做的查询是添加一个COUNT 列,计算results where stage = stage1 的数量

期望的结果是:

parent_id | stage | stage_no_count | stage_yes_count

我该怎么做呢?

编辑: 对于所有的答案,谢谢!我只是想了解这样一个简单查询的逻辑。我可以将它重新应用于更复杂的查询,但很好奇我将如何做一个简单的例子。

【问题讨论】:

哪个 MySQL 版本? SELECT VERSION() 另请参阅 Why should I provide an MCVE for what seems to me to be a very simple SQL query? 以提供示例数据和预期结果。 【参考方案1】:

使用 MySQL,我们可以使用条件聚合。速记版本是这样的:

SELECT t.parent_id
     , t.stage
     , SUM(t.results = 'no')    AS stage_no_count
     , SUM(t.results = 'yes')   AS stage_yes_count
  FROM stages t
 GROUP
    BY t.parent_id
     , t.stage

更便携,更符合 ANSI SQL 标准

SELECT t.parent_id
     , t.stage
     , SUM(CASE t.results WHEN 'no'  THEN 1 ELSE 0 END)  AS stage_no_count
     , SUM(CASE t.results WHEN 'yes' THEN 1 ELSE 0 END)  AS stage_yes_count
  FROM stages t
 GROUP
    BY t.parent_id
     , t.stage

results 的 NULL 值处理略有不同,无论我们返回 0 还是 NULL)

【讨论】:

这不会算上所有的舞台是或否吗?不是第1阶段/第2阶段 nm,group BY 解决了这个问题【参考方案2】:

不知道示例数据和/或预期结果。 我假设你想在 parent_id 和舞台上 PIVOT

有 COUNT 个

SELECT
   parent_id
 , stage
 , COUNT(CASE WHEN results = 'no' THEN 1 ELSE NULL END) AS stage_no_count
 , COUNT(CASE WHEN results = 'yes' THEN 1 ELSE NULL END) AS stage_yes_count
FROM 
 stages
GROUP BY
  parent_id
, stage
# if the order is important in the results
ORDER BY 
 parent_id ASC

使用总和

SELECT
   parent_id
 , stage
 , SUM(CASE WHEN results = 'no' THEN 1 ELSE 0 END) AS stage_no_count
 , SUM(CASE WHEN results = 'yes' THEN 1 ELSE 0 END) AS stage_yes_count
FROM 
 stages
GROUP BY
  parent_id
, stage
# if the order is important in the results
ORDER BY 
 parent_id ASC

【讨论】:

什么? COUNT(0)?没关系..似乎适用于 OP。谁需要ecact号码? ;-) 确实COUNT(0) 转换为1 我在想什么?谢谢@PaulSpiegel 我需要咖啡.. 等等,这不会算上所有的舞台是/否吗?即 - 如果第 1 阶段为否,第 2 阶段为否,我想计算的不仅仅是第 1 阶段的“否” 如果我的回答没有帮助,请在您的问题下查看我的评论。 @摩根艾伦 抱歉,您的回答很有效!在我玩它之前我不明白它是如何工作的。它现在有意义并且按预期工作

以上是关于MySQL IF 语句然后 COUNT 列中的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何对同一列中的重复值执行IF语句

mysql统计一列中有多少不同的值

条件 If 语句:如果行中的值包含字符串...设置另一列等于字符串

mysql 求和语句

Sumproduct 与 If(IsNumber(Search

记录mysql语句