Select 多列计数,其中另一列不同
Select count of multiple columns WHERE another column is distinct
我需要了解有多少人点了哪种食物。我的 table 看起来像这样:
PersonId (int)
Hamburger (varchar100)
Fries (varchar100)
Soda (varchar100)
1
"Unique burger"
"Unique Fry"
"Unique Soda"
2
"Unique burger"
"Unique Fry"
"Unique Soda"
1
"Unique burger"
NULL
"Unique Soda"
3
"Unique burger"
"Unique Fry"
NULL
如您所见,PersonID
可以多次出现。
我需要每个人的汉堡包、薯条和苏打水的总数。
理想情况下,我的结果集应该是这样的:
HamburgerCount
FriesCount
SodaCount
12334243
567456745
2463434
根据我的尝试,到目前为止,此查询为我提供了我想要的单个值结果:
SELECT COUNT(DISTINCT Id) AS HId
FROM Table
WHERE Hamburger IS NOT NULL
如果我想在同一个 table 中 return 多个值,这似乎有点低效。我尝试用 Hamburgers 和 Fries 对此进行子查询,但它让我得到了无穷大的相同结果。当我尝试 Union 时出错。如果我要对汉堡、薯条和苏打水进行 select 计数,我无法“在何处”指定 Id 的不同值。
我在 Whosebug 上下搜索过,我找到了关于 return 不同的多列或不同行的查询。
提前致谢。
如果您不介意垂直结果,可以使用 UNION:
select 'hamburgers' as food, count(distinct personid) as people
from table
where hamburger is not null
union
select 'fries' as food, count(distinct personid) as people
from table
where fries is not null
union
select 'soda' as food, count(distinct personid) as people
from table
where soda is not null
使用条件聚合:
SELECT COUNT(DISTINCT CASE WHEN Hamburger IS NOT NULL THEN Id END) AS HamburgerCount,
COUNT(DISTINCT CASE WHEN Fries IS NOT NULL THEN Id END) AS FriesCount,
COUNT(DISTINCT CASE WHEN Soda IS NOT NULL THEN Id END) AS SodaCount
FROM tablename;
我需要了解有多少人点了哪种食物。我的 table 看起来像这样:
PersonId (int) | Hamburger (varchar100) | Fries (varchar100) | Soda (varchar100) |
---|---|---|---|
1 | "Unique burger" | "Unique Fry" | "Unique Soda" |
2 | "Unique burger" | "Unique Fry" | "Unique Soda" |
1 | "Unique burger" | NULL | "Unique Soda" |
3 | "Unique burger" | "Unique Fry" | NULL |
如您所见,PersonID
可以多次出现。
我需要每个人的汉堡包、薯条和苏打水的总数。
理想情况下,我的结果集应该是这样的:
HamburgerCount | FriesCount | SodaCount |
---|---|---|
12334243 | 567456745 | 2463434 |
根据我的尝试,到目前为止,此查询为我提供了我想要的单个值结果:
SELECT COUNT(DISTINCT Id) AS HId
FROM Table
WHERE Hamburger IS NOT NULL
如果我想在同一个 table 中 return 多个值,这似乎有点低效。我尝试用 Hamburgers 和 Fries 对此进行子查询,但它让我得到了无穷大的相同结果。当我尝试 Union 时出错。如果我要对汉堡、薯条和苏打水进行 select 计数,我无法“在何处”指定 Id 的不同值。
我在 Whosebug 上下搜索过,我找到了关于 return 不同的多列或不同行的查询。
提前致谢。
如果您不介意垂直结果,可以使用 UNION:
select 'hamburgers' as food, count(distinct personid) as people
from table
where hamburger is not null
union
select 'fries' as food, count(distinct personid) as people
from table
where fries is not null
union
select 'soda' as food, count(distinct personid) as people
from table
where soda is not null
使用条件聚合:
SELECT COUNT(DISTINCT CASE WHEN Hamburger IS NOT NULL THEN Id END) AS HamburgerCount,
COUNT(DISTINCT CASE WHEN Fries IS NOT NULL THEN Id END) AS FriesCount,
COUNT(DISTINCT CASE WHEN Soda IS NOT NULL THEN Id END) AS SodaCount
FROM tablename;