【问题标题】:Counts on single column for different conditions针对不同条件计算单个列
【发布时间】:2012-01-09 10:23:44
【问题描述】:

对于不同的条件,我需要在单个列上进行 3 个不同的计数。

表结构:

interview-
id-int(10)
c_id-int(10)
experience-varchar2(100)

经验有 3 个不同的值- 1)积极的 2)负 3)中性

对于 c_id=10 的条件,我需要 3 个不同的“count_positive”、“count_negative”和“count_neutral”计数。

我知道它可以通过 3 个不同的查询获得。我可以通过单个查询获得 3 个计数吗?

【问题讨论】:

  • 我可以获取codeigniter的活动记录查询吗?

标签: php mysql sql codeigniter


【解决方案1】:
SELECT
   SUM(CASE experience
          WHEN 'positive' THEN 1
          ELSE 0
       END) AS CountPositive
   , SUM(CASE experience
            WHEN 'negative' THEN 1
            ELSE 0
         END) AS CountNegative
   , SUM(CASE experience
            WHEN 'neutral' THEN 1
            ELSE 0
         END) AS CountNeutral
FROM Interview
WHERE c_id = 10

【讨论】:

  • Weneger:最后一个 ELSE 条件为空,我猜应该放 0。
  • @yaqubAhmad 很好,谢谢。我将 0 添加到最后一个 CASE
【解决方案2】:
select 'Positive Count' , count(*)
from interview
where experience = 'positive'
UNION
select 'Negative Count' , count(*)
from interview
where experience = 'negative'
UNION
select 'Neutral' , count(*)
from interview
where experience = 'neutral'

【讨论】:

  • 您是否在问题中看到过“我知道它可以通过 3 个不同的查询获得”这样的说法?
【解决方案3】:

这是修改版的亚当温格回答:

SELECT
   COUNT(CASE experience
          WHEN 'positive' THEN 1
          ELSE NULL
       END) AS CountPositive
   , COUNT(CASE experience
            WHEN 'negative' THEN 1
            ELSE NULL
         END) AS CountNegative
   , COUNT(CASE experience
            WHEN 'neutral' THEN 1
            ELSE NULL
         END) AS CountNeutral
FROM Interview
WHERE c_id = 10

【讨论】:

  • 抱歉,您能详细说明一下吗?
  • 我找到了解决方案。您可以查看我的解决方案。
【解决方案4】:

我认为这很好用:

select 'count of ' + experience, 
       count(experience) 
from interview 
where c_id=10
group by experience

【讨论】:

  • + 不是 MySQL 中的连接运算符。 || 是,但仅在 ANSI SQL 模式下。
【解决方案5】:

我在 Codeigniter 中找到了活动记录查询的解决方案:

$this->db->select('SUM(CASE experience
          WHEN "positive" THEN 1
          ELSE 0
       END) AS CountPositive
   , SUM(CASE experience
            WHEN "negative" THEN 1
            ELSE 0
         END) AS CountNegative
   , SUM(CASE experience
            WHEN "neutral" THEN 1
            ELSE 0
         END) AS CountNeutral');

$this->db->where('c_id',10);
$query=$this->db->get('interview');
$result=$query->result();

$interview_experience=$result[0];
$positive_count=$interview_experience->CountPositive;
$negative_count=$interview_experience->CountNegative;
$neutral_count=$interview_experience->CountNeutral;

【讨论】:

    猜你喜欢
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多