【问题标题】:How can I select summation value of record columns that are different?如何选择不同记录列的总和值?
【发布时间】:2011-09-25 08:18:15
【问题描述】:

以下查询不正确,但我想要类似的内容

SELECT sum(price) AS price, sum(paid) AS paid
FROM finance
WHERE sum(price) != sum(paid)
GROUP BY item_id

我想要的是检索已售出但尚未全额付款的商品的总价格已付款

(这意味着总价格和支付总额不同)

编辑 1

这是我的表结构

// table schedule_member
schedule_member_id (PK)
schedule_id (FK: schedule.schedule_id)
student_id (FK: student.student_id)
fee
paid
added (Current timestamp)

sql 查询是

SELECT sum(fee) AS total_fee, sum(paid) AS total_paid 
FROM schedule_member 
WHERE total_fee != total_paid 
GROUP BY student_id

然后出现错误,#1054 - 'where 子句'中的未知列'abc'

【问题讨论】:

  • 您能描述一下finance 表吗?
  • 没有名为 price 的列,这就是它出错的原因
  • 查看我的编辑;根据您的表结构

标签: mysql sql aggregation


【解决方案1】:

尝试使用HAVING 代替WHERE

SELECT sum(price) AS pricesum, sum(paid) AS paidsum
FROM finance
GROUP BY item_id
HAVING pricesum <> paidsum

【讨论】:

    【解决方案2】:

    这样怎么样

    SELECT sum(fee) AS totalfee, 
    sum(paid) AS totalpaid 
    FROM finance 
    WHERE totalfee < totalpaid 
    GROUP BY item_id 
    

    【讨论】:

      【解决方案3】:
      SELECT sum(price) AS price, sum(paid) AS paid
      FROM finance
      GROUP BY item_id
      HAVING sum(price) != sum(paid)
      

      【讨论】:

        【解决方案4】:

        您不只是在寻找以下内容吗?

        SELECT sum(price) AS total_price, sum(paid) AS total_paid
        FROM finance
        WHERE price <> paid
        GROUP BY item_id
        

        【讨论】:

        • @Martijn,我想你的意思是WHERE total_price &lt;&gt; total_paid
        • 尚未修复,您已将 sum() 别名为不同的名称,但在 WHERE 子句中使用实际列名
        • @Tar_W45,看我最后的评论。
        • 无论如何它都不起作用。我正在编辑第一篇文章,向您展示我的桌子。
        猜你喜欢
        • 2019-06-18
        • 2019-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多