2

我想申请条件GROUP BY

当条件city_id != 0为真时,对列表进行分组。否则正常列表。

我为此使用了这个查询:

(
    SELECT city_id, sum(sales) as counts
    FROM product_sales
    WHERE city_id !=0     
    GROUP BY city_id
)
UNION
(
    SELECT city_id, sales 
    FROM product_sales  
    WHERE city_id =0     
    ORDER BY sales_id 
)

任何人都可以帮助我避免UNION并在单个查询中获取列表?

4

1 回答 1

4

一个想法:GROUP BYcity_id它不为零时,否则模拟一个随机唯一值用于分组UUID()。所以每一行都city_id = 0不会被分组。

select city_id, sum(sales)
from product_sales
group by
  case when city_id = 0
  then UUID()
  else city_id
  end

SQL小提琴。

UUID 被设计为在空间和时间上全球唯一的数字。对 UUID() 的两次调用预计会生成两个不同的值,即使这些调用是在未相互连接的两台独立计算机上执行的。

于 2013-04-16T08:12:24.617 回答