【发布时间】:2021-12-09 09:28:59
【问题描述】:
我需要了解有多少人点了什么类型的食物。我的桌子看起来像这样:
| 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
如果我想在同一个表中返回多个值,这似乎有点低效。我尝试用汉堡包和薯条对此进行子查询,但它让我得到了无限的相同结果。当我尝试联合时它出错了。如果我要对汉堡、薯条和苏打水进行选择计数,我无法为 Id “在哪里”一个不同的值。
我在 StackOverflow 上下搜索,我发现查询返回不同的多列或不同的行。
提前致谢。
【问题讨论】:
-
只标记您使用的数据库。
-
这些列的数据类型是什么?
标签: sql count conditional-aggregation