SQL Group By和Count函数

SQL Group By和Count函数,sql,pivot,crosstab,Sql,Pivot,Crosstab,我看到下面的db表,我想按颜色进行计数和分组。我是一年级的学生,也是SQL的初学者。有人能用代码教学吗 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 Yel

我看到下面的db表,我想按颜色进行计数和分组。我是一年级的学生,也是SQL的初学者。有人能用代码教学吗

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;

您应该搜索一下,这是一个非常常见的SQL语句

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

你的问题基本上是对的。您只需删除
分组依据
,并修复
案例
,以引用数据中的列:

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;

您的查询存在的问题是,您混合了两种方法,这两种方法都有效但不兼容

第一种是使用
case
语句,就像@LONG在其答案中所做的那样,这很好,但不需要
groupby
;您已经通过在每列中提供不同的条件来“人工”分组

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
另一种方法是使用
分组方式,也可以,但是您只需要计算每个组的行数

select  COLOR, count(*) as CNT
from    TAB_GROUP
group by COLOR
这将为您提供与所需结果相同但行和列颠倒的结果

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

要将行移动到列,您需要一个数据透视函数,其语法可能因您使用的数据库而异。这使得这种方法更加复杂,但在可能值的数量增加的情况下也更加通用。

您尝试过任何方法吗?StackOverflow不是这样工作的,我要说的是,这不是您学习SQL(或其他任何方法)的方式。像这样的问题已经在多个网站上被问过多次了(包括在内),你所要做的就是做一些研究。如果这样做之后,你仍然无法解决这个问题,那么回到这里,发布一个问题,描述你尝试了什么以及有什么问题,你会找到帮助。关键词提示:搜索“分组依据”、“计数”、“大小写”、“透视图”,您可能会发现有趣的资源。很抱歉,我忘了发布我所选的内容选择颜色,求和(蓝色为1时的大小写为1,其他0结束)为蓝色,求和(红色为1时的大小写为0结束)为红色,求和(黄色为1时的大小写为1,其他0结束)为黄色,求和(黑色时的大小写为1或0结束)作为黑色时的计数总和(绿色时的大小写为1或0结束)作为绿色时的计数从标签组按颜色分组;你的查询有什么问题?@Rahul,不太正确,实际上是在我的电话上回答的。
COLOR  | CNT 
Blue   | 2
Red    | 2
Yellow | 1
Black  | 1
Green  | 1