如何使用内部联接获取每一行的计数?收到一列不存在的错误

时间:2019-12-27 13:22:35

标签: mysql sql database

我试图获取order_sum列的总和以及其中payment_method分别为现金和卡的order_sum的总和。但是我收到一个错误,指出一列不存在。

任何帮助将不胜感激!

  

“ on子句”中的未知列“ table2.id”

这是我的orders桌子

+----+-----------+----------------+------------+---------------------+
| id | order_sum | payment_method | is_deleted | created_at          |
+----+-----------+----------------+------------+---------------------+
| 1  | 123       | cash           | 0          | 2019-12-15 12:05:38 |
| 2  | 456       | card           | 0          | 2019-12-16 17:45:11 |
| 3  | 789       | cash           | 0          | 2019-12-16 20:14:59 |
+----+-----------+----------------+------------+---------------------+

这是我到目前为止的查询。

SELECT
    sum(order_sum) as order_sum,
    count(*) as count,
    DATE_FORMAT(created_at, '%Y-%m-%e') as date,
    table2.cash_sum
FROM
    orders
INNER JOIN (
    SELECT
        sum(order_sum) as cash_sum,
        DATE_FORMAT(created_at, '%Y-%m-%e') as date
    FROM
        orders
    WHERE payment_method = 'cash'
    GROUP BY
        date
) as table2 on orders.id = table2.id
where
    is_deleted = 0
group by
    date 
order by date

所需的结果看起来像这样

+------------+-----------+----------+----------+
| date       | order_sum | cash_sum | card_sum |
+------------+-----------+----------+----------+
| 2019-12-15 | 579       | 123      | 0        |
| 2019-12-16 | 1245      | 789      | 456      |
+------------+-----------+----------+----------+

1 个答案:

答案 0 :(得分:3)

可以通过条件聚合来实现:

SELECT DATE_FORMAT(created_at, '%Y-%m-%e') as date,
       sum(order_sum) as order_sum,
       sum(CASE WHEN payment_method = 'cash' THEN order_sum END) as cash_sum,
       sum(CASE WHEN payment_method = 'card' THEN order_sum END) as card_sum,
       count(*) as count
FROM orders
where is_deleted = 0
group by DATE_FORMAT(created_at, '%Y-%m-%e')
order by date