我有一张桌子,想要在特定的日期中获取一列的总价格。日期是字符串(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
答案 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');
向前移动,请不要将您的日期存储为这样的文本。通常,您可以假设每次必须在MySQL查询中使用STR_TO_DATE
时,小狗就会被抢劫。