内部加入的计数和结果

时间:2015-05-10 14:55:55

标签: sql firebird

我有这个查询

SELECT COUNT(*) FROM (
SELECT
  ART.LFDNR,
  ARTSTLST.ARTIKELLFDNR,
  Count(*) AS counts
FROM
  ARTIKEL ART
  INNER JOIN ARTSTLST ON ARTSTLST.OARTIKELLFDNR = ART.LFDNR
WHERE
  ART.SUCHARTIKELNR = '22424'
GROUP BY
  ART.LFDNR,
  ARTSTLST.ARTIKELLFDNR            ) 

导致我的案例

3

但我想显示内部查询的结果

SELECT
  ART.LFDNR,
  ARTSTLST.ARTIKELLFDNR,
  Count(*) AS counts
FROM
  ARTIKEL ART
  INNER JOIN ARTSTLST ON ARTSTLST.OARTIKELLFDNR = ART.LFDNR
WHERE
  ART.SUCHARTIKELNR = '22424'
GROUP BY
  ART.LFDNR,
  ARTSTLST.ARTIKELLFDNR  

所以结果看起来像这样

12345        34567        3

这是selct加上Count()结果的结果。

1 个答案:

答案 0 :(得分:1)

使用窗口聚合函数:

可以很容易
SELECT
  ART.LFDNR,
  ARTSTLST.ARTIKELLFDNR,
  Count(*) AS counts,
  SUM(Count(*)) OVER () -- Group sum
FROM
  ARTIKEL ART
  INNER JOIN ARTSTLST ON ARTSTLST.OARTIKELLFDNR = ART.LFDNR
WHERE
  ART.SUCHARTIKELNR = '22424'
GROUP BY
  ART.LFDNR,
  ARTSTLST.ARTIKELLFDNR  

但AFAIK只有Firebird 3(目前处于测试阶段)支持这些功能,因此您需要使用公用表表达式进行更复杂的查询:

WITH cte AS
  ( 
    SELECT
      ART.LFDNR,
      ARTSTLST.ARTIKELLFDNR,
      Count(*) AS counts
    FROM
      ARTIKEL ART
      INNER JOIN ARTSTLST ON ARTSTLST.OARTIKELLFDNR = ART.LFDNR
    WHERE
      ART.SUCHARTIKELNR = '22424'
    GROUP BY
      ART.LFDNR,
      ARTSTLST.ARTIKELLFDNR  
 ) 
SELECT cte.*, (SELECT SUM(counts) FROM cte)
FROM cte