簡體   English   中英

選擇多列的計數,其中另一列不同

[英]Select count of multiple columns WHERE another column is distinct

我需要找出有多少人點了什么類型的食物。 我的桌子看起來像這樣:

人名 漢堡包 薯條 蘇打
1 “獨特的漢堡” “獨特的炒菜” “獨特的蘇打水”
2 “獨特的漢堡” “獨特的炒菜” “獨特的蘇打水”
1 “獨特的漢堡” 空值 “獨特的蘇打水”
3 “獨特的漢堡” “獨特的炒菜” 空值

如您所見, PersonID可以出現多次。

我需要每個唯一的人的漢堡包、薯條和蘇打水的總數。

所以理想情況下,我的結果集如下所示:

漢堡伯爵 薯條數 蘇打水
12334243 567456745 2463434

根據我的嘗試,到目前為止,這個查詢為我提供了我想要的單個值的結果:

SELECT COUNT(DISTINCT Id) AS HId
FROM Table
WHERE Hamburger IS NOT NULL

如果我想在同一個表中返回多個值,這似乎有點低效。 我試着用漢堡包和薯條子查詢這個,但它得到了無限的相同結果。 當我嘗試 Union 時它出錯了。 如果我要對漢堡、薯條和蘇打水進行精選計數,我就無法為 Id 指定一個不同的值。

我上下搜索了 StackOverflow,我找到了返回不同的多列或按行不同的查詢。

提前致謝。

如果您不介意垂直結果,則可以使用 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM