2017-04-20 92 views
-1

我高清以下的数据库表,我想通过颜色进行计数和分组。我是SQL的一名学生和初学者。任何人都可以教代码吗?SQL组By和Count功能

SQL-CountColor:

SQL-CountColor

我曾尝试:

Select COLOR, 
    sum(case when Blue = 1 then 1 else 0 end) as Blue_count, 
    sum(case when Red then 1 else 0 end) as Red_count, 
    sum(case when Yellow then 1 else 0 end) as Yellow_count, 
    sum(case when Black then 1 else 0 end) as Black_count, 
    sum(case when Green then 1 else 0 end) as Green_count, 
from TAB_GROUP 
group by COLOR; 
+1

你尝试过什么吗? – Milney

+1

这不是StackOverflow的工作原理,让我说,这不是你将如何学习SQL(或其他任何东西)。像这样的问题已经在多个网站上被多次询问(包括SO),所有你需要做的只是一点研究。如果在这样做之后,你仍然无法解决这个问题,请回到这里并发布一个问题,描述你尝试过的和错误的,并且你会找到帮助。关键词tip:搜索“group by”,“count”,“case”,“pivot”,您可能会发现有趣的资源。 –

+0

对不起,我忘记发布我试过的东西 – DerrickWong

回答

0

与您查询的问题是,你混合两种方法,既有效但不兼容。

第一个使用case声明,就像@LONG在其答案中所做的那样,并且没有问题,但不需要group by;你已经通过在每一栏中给予不同的条件“人为地”分组了;

select sum(case when Blue = 1 then 1 else 0 end) as Blue_count, 
     sum(case when Red then 1 else 0 end) as Red_count, 
     sum(case when Yellow then 1 else 0 end) as Yellow_count, 
     sum(case when Black then 1 else 0 end) as Black_count, 
     sum(case when Green then 1 else 0 end) as Green_count 
from TAB_GROUP 

另一种方法是使用group by,并且它也很有效,但你只需要计算行数为每个组

select COLOR, count(*) as CNT 
from TAB_GROUP 
group by COLOR 

这会给你一个结果是一样的如所期望的一个,但与倒

COLOR | CNT 
Blue | 2 
Red | 2 
Yellow | 1 
Black | 1 
Green | 1 

要移动行列,你需要旋转功能,可能取决于你全光照的数据库,其语法的行和列G。这使得这种方法更复杂,但是在可能值的数量增加的情况下也更通用。

0
select  sum(case when color = 'blue' then 1 else 0 end) as 'Blue', 
      sum(case when color = 'red' then 1 else 0 end) as 'Red', 
      sum(case when color = 'yellow' then 1 else 0 end) as 'Yellow', 
      sum(case when color = 'Black' then 1 else 0 end) as 'Black', 
      sum(case when color = 'Green' then 1 else 0 end) as 'Green' 
From Table 
+1

看起来像你真的很急于回答... – Rahul

+0

@Rahul,不是真的,实际上在我的手机上回答。 – LONG

1

你应该寻找一点点,这是一个很常见的SQL语句。

select COLOR, count(*) from TAB_GROUP group by COLOR 
0

你的查询基本上是正确的。所有你需要做的是去除GROUP BY并修复case指列数据:

select sum(case when color = 'Blue' then 1 else 0 end) as Blue_count, 
     sum(case when color = 'Red' then 1 else 0 end) as Red_count, 
     sum(case when color = 'Yellow' then 1 else 0 end) as Yellow_count, 
     sum(case when color = 'Black' then 1 else 0 end) as Black_count, 
     sum(case when color = 'Green' then 1 else 0 end) as Green_count 
from TAB_GROUP;