我试图获取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 |
+------------+-----------+----------+----------+
答案 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