显示具有相同值的行数

holgip5t  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(2)|浏览(572)

我有一张简单的table:

  1. CREATE TABLE clicks
  2. (
  3. Year UInt16,
  4. Week UInt8,
  5. Day UInt8,
  6. Month UInt8,
  7. ClickDate Date,
  8. ClickTime DateTime,
  9. AdvertId String,
  10. UserId String,
  11. Age UInt8,
  12. Country FixedString(2),
  13. Gender Enum8('male' = 1, 'female' = 2),
  14. Ip String
  15. )
  16. ENGINE = MergeTree(ClickDate, (Year, ClickDate), 8192);

是否可以为一个列添加行数总和以获得一个唯一值,而不重复值,并按 ClickDate ? e、 g.我有疑问:

  1. SELECT
  2. count() AS Summary,
  3. ClickDate,
  4. SUM(roundAge(Age) = 17) AS Age_17,
  5. SUM(roundAge(Age) = 25) AS Age_25,
  6. SUM(roundAge(Age) = 35) AS Age_35,
  7. SUM(roundAge(Age) = 45) AS Age_45,
  8. SUM(Age = 0) AS Age_empty
  9. FROM clicks
  10. GROUP BY ClickDate

在这种情况下,我需要复制 Age 价值观

  1. SUM(roundAge(Age) = 17) AS Age_17,
  2. SUM(roundAge(Age) = 25) AS Age_25

我怎样才能消除这种重复?我期望的是:
源数据:

  1. ┌──ClickDate─┬─RoundedAge─┐
  2. 2016-10-09 17
  3. └────────────┴────────────┘
  4. ┌──ClickDate─┬─RoundedAge─┐
  5. 2016-10-09 25
  6. 2016-10-09 17
  7. 2016-10-09 45
  8. 2016-10-09 45
  9. 2016-10-09 35
  10. 2016-10-09 45
  11. 2016-10-09 25
  12. 2016-10-09 18
  13. 2016-10-10 25
  14. 2016-10-10 25
  15. └────────────┴────────────┘
  16. ┌──ClickDate─┬─RoundedAge─┐
  17. 2016-10-09 17
  18. └────────────┴────────────┘

所需输出:

  1. ┌─Summary─┬──ClickDate─┬─Age_17─┬─Age_25─┬─Age_35─┬─Age_45─┬─Age_empty─┐
  2. 10 2016-10-09 3 2 1 3 0
  3. 2 2016-10-10 0 2 0 0 0
  4. └─────────┴────────────┴────────┴────────┴────────┴────────┴───────────┘
mkh04yzy

mkh04yzy1#

抱歉,我没法给你魔法。但是,这看起来更好:

  1. SELECT
  2. count() AS Summary,
  3. ClickDate,
  4. countIf(Age = 17),
  5. countIf(Age = 25),
  6. countIf(Age = 35),
  7. countIf(Age = 45),
  8. SUM(Age = 0) AS Age_empty
  9. FROM clicks
  10. GROUP BY ClickDate

我刚用了组合词“如果”。我希望这能帮到你。

0ve6wy6x

0ve6wy6x2#

您可以在以下情况下使用case

  1. SELECT
  2. count(*) AS Summary,
  3. ClickDate,
  4. sum( case when age = 17 then 1 else 0 end), Age_17,
  5. sum( case when age = 25 then 1 else 0 end), Age_25,
  6. sum( case when age = 35 then 1 else 0 end), Age_35,
  7. sum( case when age = 45 then 1 else 0 end), Age_45,
  8. sum( case when ifnull(age,0) = 0 then 1 else 0 end) Age_Empty
  9. FROM clicks
  10. GROUP BY ClickDate

如果你需要范围,你可以在

  1. SELECT
  2. count(*) AS Summary,
  3. ClickDate,
  4. sum( case when age between 1 and 17 then 1 else 0 end), Age_17,
  5. sum( case when age between 18 and 25 then 1 else 0 end), Age_25,
  6. sum( case when age between 26 and 35 then 1 else 0 end), Age_35,
  7. sum( case when age between 36 and 45 then 1 else 0 end), Age_45,
  8. sum( case when ifnull(age,0) = 0 then 1 else 0 end) Age_Empty
  9. FROM clicks
  10. GROUP BY ClickDate
展开查看全部

相关问题