【问题标题】:How to display customer name for every transaction with total price is higher than average price?如何为每笔总价高于平均价的交易显示客户姓名?
【发布时间】:2022-03-05 04:09:07
【问题描述】:

如果总价格高于每笔交易的平均价格,我想显示客户名称。但错误消息是“列 'x.average' 在 HAVING 子句中无效,因为它不包含在聚合函数或 GROUP BY 子句中。”而且我不知道问题出在哪里。

这是我的代码

SELECT  c.CustomerId,
        hs.TransactionId,
        c.CustomerName,
        SUM(t.Price) AS [Total Price]
FROM MsCustomer c JOIN HeaderSalonServices hs
ON c.CustomerId = hs.CustomerId
JOIN DetailSalonServices ds
ON ds.TransactionId = hs.TransactionId
JOIN MsTreatment t
ON t.TreatmentId = ds.TreatmentId,
(SELECT AVG(Price) AS average
 FROM MsTreatment) AS x
GROUP BY c.CustomerId, hs.TransactionId, c.CustomerName
HAVING SUM(t.Price) > average

【问题讨论】:

标签: sql subquery average


【解决方案1】:

尝试将您的子查询移至 HAVING 子句:

SELECT  c.CustomerId,
        hs.TransactionId,
        c.CustomerName,
        SUM(t.Price) AS [Total Price]
FROM MsCustomer c JOIN HeaderSalonServices hs
ON c.CustomerId = hs.CustomerId
JOIN DetailSalonServices ds
ON ds.TransactionId = hs.TransactionId
JOIN MsTreatment t
ON t.TreatmentId = ds.TreatmentId
GROUP BY c.CustomerId, hs.TransactionId, c.CustomerName
HAVING SUM(t.Price) > (SELECT AVG(Price) AS average FROM MsTreatment)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多