Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL将两个以新名称分组的查询组合在一起_Sql_Group By_Count_Union - Fatal编程技术网

SQL将两个以新名称分组的查询组合在一起

SQL将两个以新名称分组的查询组合在一起,sql,group-by,count,union,Sql,Group By,Count,Union,我不知道这个问题的措辞是否正确,因为我不确定我在寻找什么。对不起 我有一个PHP脚本,它创建一个饼图,并从SQL查询中获取输入,如下所示: Column | COUNT(Column) x | y 例如,我要求提供性别饼图,并使用: gender | COUNT(gender) female | 17 male | 13 或国籍饼图: nationality | COUNT(nationality) us | 3 uk | 8 es

我不知道这个问题的措辞是否正确,因为我不确定我在寻找什么。对不起

我有一个PHP脚本,它创建一个饼图,并从SQL查询中获取输入,如下所示:

Column | COUNT(Column)
x      | y
例如,我要求提供性别饼图,并使用:

gender | COUNT(gender)
female | 17
male   | 13
或国籍饼图:

nationality | COUNT(nationality)
us          | 3
uk          | 8
es          | 4
我通过以下查询很容易得到这些结果

SELECT myColumn, COUNT(myColumn) FROM myTable GROUP BY myColumn ORDER BY COUNT(myColumn)
现在我想要一张有活人/死人的饼图。在我的桌子上,我有出生和死亡。因此,我必须做些别的事情来满足我的期望:

alive | COUNT(alive)
alive | 16
dead  | 4
我可以让人活着

SELECT alive.*
FROM persons AS alive
WHERE alive.deceased = NULL OR alive.deceased = '0000-00-00' AND alive.born != '0000-00-00'
死亡的人有:

SELECT dead.*
FROM persons AS dead
WHERE NOT dead.deceased = NULL OR dead.deceased != '0000-00-00'
所以问题是,我如何结合这些来得到

alive | COUNT(alive)
alive | 16
dead  | 4
?

我想它包括COUNT()和GROUP BY,但我不知道怎么做。也许也有工会


谢谢大家!

您可以通过以下查询完成:

SELECT 
   case when COALESCE(deceased,'0000-00-00') AND born != '0000-00-00' then 'alive' else 'dead' end as Alive
   , count(*) as Count
FROM persons
group by case when COALESCE(deceased,'0000-00-00') = '0000-00-00' AND born != '0000-00-00' then 'alive' else 'dead' end

您可以通过以下查询执行此操作:

SELECT 
   case when COALESCE(deceased,'0000-00-00') AND born != '0000-00-00' then 'alive' else 'dead' end as Alive
   , count(*) as Count
FROM persons
group by case when COALESCE(deceased,'0000-00-00') = '0000-00-00' AND born != '0000-00-00' then 'alive' else 'dead' end

您可以通过在case语句上使用case语句和groupby来完成此操作

DECLARE @persons TABLE (
                          [id] int not null IDENTITY(1,1),
                          born varchar(10) NULL,
                          deceased varchar(10) NULL
                        )

INSERT INTO @persons
(born,deceased)
values('2019-01-01','2019-07-08')
,('2020-05-03',NULL)
,('2000-03-10','0000-00-00')
,('0000-00-00',NULL)
,('2008-01-01',NULL)

SELECT CASE WHEN ISNULL(Per.deceased,'0000-00-00') = '0000-00-00' THEN 'Alive'
            WHEN ISNULL(Per.deceased, '0000-00-00') <> '0000-00-00' THEN 'Dead'
         END AS [CountType]
        ,COUNT(*) AS Total
FROM @persons AS Per
WHERE ISNULL(Per.born,'0000-00-00') <> '0000-00-00' 
GROUP BY CASE WHEN ISNULL(Per.deceased,'0000-00-00') = '0000-00-00' THEN 'Alive'
              WHEN ISNULL(Per.deceased, '0000-00-00') <> '0000-00-00' THEN 'Dead'
         END
DECLARE@persons表(
[id]int非空标识(1,1),
born varchar(10)NULL,
已故varchar(10)NULL
)
插入@persons
(出生、死亡)
数值('2019-01-01'、'2019-07-08')
,('2020-05-03',空)
,('2000-03-10','0000-00-00')
,('0000-00-00',空)
,('2008-01-01',空)
选择为空时的大小写(根据死者,'0000-00-00')='0000-00-00',然后选择“活着”
当为空时(按“已死亡”,“0000-00-00”)“0000-00-00”则为“已死亡”
结束为[计数类型]
,将(*)计为总数
根据
其中为空(根据出生日期,'0000-00-00')'0000-00-00'
按案例分组,当ISNULL(每个死者,'0000-00-00')='0000-00-00'然后是'Alive'
当为空时(按“已死亡”,“0000-00-00”)“0000-00-00”则为“已死亡”
结束
上述代码的结果

计数类型 全部的 活着的 3. 死去的 1.
您可以通过在case语句上使用case语句和groupby来完成此操作

DECLARE @persons TABLE (
                          [id] int not null IDENTITY(1,1),
                          born varchar(10) NULL,
                          deceased varchar(10) NULL
                        )

INSERT INTO @persons
(born,deceased)
values('2019-01-01','2019-07-08')
,('2020-05-03',NULL)
,('2000-03-10','0000-00-00')
,('0000-00-00',NULL)
,('2008-01-01',NULL)

SELECT CASE WHEN ISNULL(Per.deceased,'0000-00-00') = '0000-00-00' THEN 'Alive'
            WHEN ISNULL(Per.deceased, '0000-00-00') <> '0000-00-00' THEN 'Dead'
         END AS [CountType]
        ,COUNT(*) AS Total
FROM @persons AS Per
WHERE ISNULL(Per.born,'0000-00-00') <> '0000-00-00' 
GROUP BY CASE WHEN ISNULL(Per.deceased,'0000-00-00') = '0000-00-00' THEN 'Alive'
              WHEN ISNULL(Per.deceased, '0000-00-00') <> '0000-00-00' THEN 'Dead'
         END
DECLARE@persons表(
[id]int非空标识(1,1),
born varchar(10)NULL,
已故varchar(10)NULL
)
插入@persons
(出生、死亡)
数值('2019-01-01'、'2019-07-08')
,('2020-05-03',空)
,('2000-03-10','0000-00-00')
,('0000-00-00',空)
,('2008-01-01',空)
选择为空时的大小写(根据死者,'0000-00-00')='0000-00-00',然后选择“活着”
当为空时(按“已死亡”,“0000-00-00”)“0000-00-00”则为“已死亡”
结束为[计数类型]
,将(*)计为总数
根据
其中为空(根据出生日期,'0000-00-00')'0000-00-00'
按案例分组,当ISNULL(每个死者,'0000-00-00')='0000-00-00'然后是'Alive'
当为空时(按“已死亡”,“0000-00-00”)“0000-00-00”则为“已死亡”
结束
上述代码的结果

计数类型 全部的 活着的 3. 死去的 1.
deaster=NULL
是一个无意义的条件。它的计算结果永远不会为true。好的,谢谢,将更新。
deaster=NULL
是一个无意义的条件。它的计算结果从来都不是真的。好的,谢谢你,我们会更新的。谢谢你详细的回答!但是我有一个错误<代码>调用本机函数“ISNULL”时参数计数不正确。。您的答案与@eshirvana非常相似,并且该查询有效。。我将研究这些差异。谢谢大家!@Robbas-不知道你为什么会收到错误消息。您使用的是MySQL还是SQL?SQL ISNULL的MySQL等价物是ifNull谢谢,这很有效。我正在使用MariaDB。谢谢你详细的回答!但是我有一个错误<代码>调用本机函数“ISNULL”时参数计数不正确。。您的答案与@eshirvana非常相似,并且该查询有效。。我将研究这些差异。谢谢大家!@Robbas-不知道你为什么会收到错误消息。您使用的是MySQL还是SQL?SQL ISNULL的MySQL等价物是ifNull谢谢,这很有效。我正在使用MariaDB。谢谢!很好!现在我将研究它以确保我理解它(:谢谢!非常好!现在我将研究它以确保我理解它(: