SQL将两个以新名称分组的查询组合在一起
我不知道这个问题的措辞是否正确,因为我不确定我在寻找什么。对不起 我有一个PHP脚本,它创建一个饼图,并从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
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。谢谢!很好!现在我将研究它以确保我理解它(:谢谢!非常好!现在我将研究它以确保我理解它(: