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

1 つのアイデア: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() への 2 つの呼び出しは、互いに接続されていない 2 つの別個のコンピューターでこれらの呼び出しが実行された場合でも、2 つの異なる値を生成することが期待されます。

于 2013-04-16T08:12:24.617 に答える