对分组的记录的唯一值运行聚合函数

时间:2019-03-04 17:38:54

标签: sql tsql

这应该是一个相当简单的任务。我可以用cursor完成它,但是我真的很想像普通的query那样做。表格摘要如下:CustIdProductIdOrderIdUnitPriceLineTotal。对于每个SUM()LineTotal,我需要获取所有COUNT()的{​​{1}}和所有唯一OrderId的{​​{1}},其中CustId是至少在2个不同的ProductId上具有相同的含义。我的查询就像下面的查询一样,但是经过验证,我意识到ProductId的唯一性受到损害,因此OrderId函数返回错误的结果。请指教。

OrderId

2 个答案:

答案 0 :(得分:1)

  

其中ProductId在至少2个不同的OrderId上相同。

您需要使用apiVersion: extensions/v1beta1 kind: Ingress metadata: name: example-ingress annotations: kubernetes.io/ingress.class: nginx spec: rules: - host: host1.com http: paths: - path: /web1 backend: serviceName: service1 servicePort: 443 - path: /api/v1/a backend: serviceName: service2 servicePort: 80 - path: /api/v1/b backend: serviceName: service3 servicePort: 80 - host: host2.com http: paths: - path: /web2 backend: serviceName: service4 servicePort: 443 - path: /api/v2/a backend: serviceName: service5 servicePort: 80(或IN(sub-query)也可以)构造而不是HAVING来强制执行此要求。这是因为您要按EXISTS()ProductId进行分组,但是此要求仅在CustId上,并且不受ProductId的影响。

在伪代码中

CustId

答案 1 :(得分:1)

您想要HAVING COUNT(DISTINCT h.OrderId) > 2而不是HAVING COUNT(h.OrderId) > 1,这不是 2个不同的OrderId 的意思吗?如果不使用> 1,但保留DISTINCT

SELECT h.CustId
    , h.ProductId
    , h.COUNT(DISTINCT h.OrderId)
    , h.SUM(h.LineTotal)
FROM History h
GROUP BY h.CustId
    , h.ProductId
HAVING COUNT(DISTINCT h.OrderId) > 2