特定字符串日期的所有列名称的总和

时间:2018-10-05 07:17:28

标签: mysql

我有一张桌子,想要在特定的日期中获取一列的总价格。日期是字符串(eg: January 2018)。我试过的是将字符串转换为日期。

SELECT
    SUM(price_amount) as 'total_paid',
    STR_TO_DATE(CONCAT('01 ',price_month), "%M %d %Y") as dates
FROM user_prices
WHERE price_type = 'cash' AND price_month >= DATE('January 01 2018')
GROUP BY price_month
ORDER BY price_month DESC;

此结果为null。我只需要获取表中日期等于或大于2018年1月1日的每个现有月的总和,并按月对它们进行分组。

email          price_amount      price_month     price_type    date_added
1@gmail.com     200              April 2017      cash          ---
19@gmail.com    400              December 2017   cash          ---
12@gmail.com    100              January 2018    cash          ---
123@gmail.com   230              January 2018    cash          ---
1234@gmail.com  250              January 2018    credit        ---
321@gmail.com   200              April 2018      cash          ---
32@gmail.com    120              March 2018      cash          ---

因此,上面的示例应在下面显示预期结果:

price_month     total_paid
March 2018      120
April 2018      200
January 2018    330

1 个答案:

答案 0 :(得分:1)

如果您向我们展示的price_month列实际上是文字文本,那么您将需要使用STR_TO_DATE来使此查询有效。请注意,STR_TO_DATE至少需要年份,月份,天信息才能生成日期。因此,在下面的查询中,我可以任意构建每个月的第一个月的数据。

SELECT
    price_month,
    SUM(price_amount) AS total_paid
FROM user_prices
WHERE
    STR_TO_DATE(CONCAT('01 ', price_month), '%d %M %Y') >= '2018-01-01' AND
    price_type = 'cash'
GROUP BY
    price_month,
    STR_TO_DATE(CONCAT('01 ', price_month), '%d %M %Y')
ORDER BY
    STR_TO_DATE(CONCAT('01 ', price_month), '%d %M %Y');

enter image description here

Demo

向前移动,请不要将您的日期存储为这样的文本。通常,您可以假设每次必须在MySQL查询中使用STR_TO_DATE时,小狗就会被抢劫。