从 table1 中选择一个日期,然后计算有多少结果 WHERE payment='cash' AND date=table1.date AS cash 并再次用于'credit' [重复]
Posted
技术标签:
【中文标题】从 table1 中选择一个日期,然后计算有多少结果 WHERE payment=\'cash\' AND date=table1.date AS cash 并再次用于\'credit\' [重复]【英文标题】:SELECT a date FROM table1 then COUNT how many results WHERE payment='cash' AND date=table1.date AS cash and again for 'credit' [duplicate]从 table1 中选择一个日期,然后计算有多少结果 WHERE payment='cash' AND date=table1.date AS cash 并再次用于'credit' [重复] 【发布时间】:2020-09-25 21:30:17 【问题描述】:这很难:) 我尝试选择日期,按日期分组并计算每一列 WHERE payment = 'cash' and 'card'
我的桌子是这样的:
id | amount | payment_method | create_date
----------
1 | 10.00 | 'cash' | 2020-09-10
----------
2 | 15.00 | 'card' | 2020-09-10
----------
3 | 23.00 | 'cash' | 2020-09-11
我期待这样的结果:
date | cash | card |
----------
2020-09-10 | 1 | 1 |
----------
2020-09-11 | 1 | 0 |
它用于计算所有付款:
SELECT DATE(op.create_date) AS cdate, COUNT(op.id) AS total
FROM order_payment op
GROUP BY cdate
我尝试使用这个:
SELECT
DATE(op.create_date) AS cdate,
COUNT(
SELECT *
FROM order_payment
WHERE DATE(create_date) = rdate AND payment_method = 'cash'
) AS cash,
COUNT(
SELECT *
FROM order_payment
WHERE DATE(create_date) = rdate AND payment_method = 'card'
) AS card
FROM order_payment op
GROUP BY cdate
但它给了我这个错误:
查询 1 错误:您的 SQL 语法有错误;检查手册 对应于您的 mysql 服务器版本以获得正确的语法 在'SELECT * FROM order_payment o WHERE DATE(o.create_date) = 附近使用 第 4 行的 rdate AND payment_me'
有人可以帮我解决这个问题吗?
【问题讨论】:
【参考方案1】:使用条件聚合:
select create_date,
sum(payment_method = 'cash') cash,
sum(payment_method = 'card') card
from mytable
group by create_date
如果create_date
有时间组件,您可以在查询中使用date(create_date)
而不是create_date
。
【讨论】:
【参考方案2】:SELECT
create_date,
SUM(IF(payment_method = 'cash', 1, 0)) AS "Cash",
SUM(IF(payment_method = 'card', 1, 0)) AS "Card"
FROM order_payment
GROUP BY create_date
【讨论】:
好吧,他们的展位就像一个沙姆一样,与@GMB答案的不同之处在于你做了一个if语句,我能知道为什么吗? GMB 使用简写语法,两者相同。它的工作原理是,如果a=b
则返回 true 将被视为 1,而 false 将被视为 0,因此它们将返回相同的总和。以上是关于从 table1 中选择一个日期,然后计算有多少结果 WHERE payment='cash' AND date=table1.date AS cash 并再次用于'credit' [重复]的主要内容,如果未能解决你的问题,请参考以下文章