如何在密码查询中进行 GROUP BY?

问题描述 投票:0回答:2

我想将 SQL 查询转换为密码。拜托,有什么解决方案可以用密码进行 GROUP BY 吗?

    SELECT dt.d_year, 
           item.i_brand_id          brand_id, 
           item.i_brand             brand, 
           Sum(ss_ext_discount_amt) sum_agg 
    FROM   date_dim dt, 
   store_sales, 
   item 
    WHERE  dt.d_date_sk = store_sales.ss_sold_date_sk 
    AND store_sales.ss_item_sk = item.i_item_sk 
    AND item.i_manufact_id = 427 
    AND dt.d_moy = 11 
    GROUP  BY dt.d_year, 
      item.i_brand, 
      item.i_brand_id 
   ORDER  BY dt.d_year, 
      sum_agg DESC, 
      brand_id;
sql neo4j group-by cypher
2个回答
22
投票

在 Cypher 中,GROUP BY 由所有聚合函数隐式完成。在 WITH/RETURN 语句中,任何不属于聚合的列都将是 GROUP BY 键。

所以例如在

MATCH (n:Person)
RETURN COUNT(n), n.name, n.age

计数将统计所有具有相同名称和年龄的节点。如果我改为做

MATCH (n:Person)
RETURN COUNT(n), n.name, MIN(n.age), MAX(n.age)

我会统计有多少人有相同的名字,以及这个名字的年龄范围。


0
投票

只要你有一个有限的预测组(比如

enum
左右)
您可以使用以下技术

UNWIND RANGE (1, 10) AS i
WITH COLLECT({ Val: i % 3 }) AS Item
RETURN REDUCE (
    acc = {}, 
    x IN Item | acc {
            .*, 
            V0: CASE x.Val WHEN 0 THEN coalesce(acc.V0 + 1, 1) ELSE acc.V0 END,
            V1: CASE x.Val WHEN 1 THEN coalesce(acc.V1 + 1, 1) ELSE acc.V1 END,
            V2: CASE x.Val WHEN 2 THEN coalesce(acc.V2 + 1, 1) ELSE acc.V2 END 
        }) AS grouping

另一种选择是:

UNWIND RANGE(1,15) AS i
  WITH i % 4 AS mod, 1 AS unit
  RETURN DISTINCT mod, count(unit) as unit
© www.soinside.com 2019 - 2024. All rights reserved.