从 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' [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何结合一列的日期和另一列的时间

使用Python编程计算一个月有多少分钟

计算截止日期和距离设定截止日期还剩多少天

SQL语句计算两个日期之间有多少个工作日的方法

计算同一列中两个日期之间的日期

SQL Server 中的条件联合,直到到达特定日期