我有这样的查询:
SELECT SUM(price) AS GINTO,
(
(SELECT COUNT(price)*9.99 FROM sms_logs WHERE price = '200000')+
(SELECT COUNT(price)*3.99 FROM sms_logs WHERE price = '60000')+
(SELECT COUNT(price)*1.99 FROM sms_logs WHERE price = '24000')+
(SELECT COUNT(price)*0.99 FROM sms_logs WHERE price = '11000')
) AS USD,
DATE_FORMAT(DATE,'%Y-%m-%d') AS DATE FROM sms_logs
WHERE DATE >='2015-03-20' AND DATE <= '2015-04-30'
GROUP BY DATE_FORMAT(DATE,'%Y-%m-%d')
我希望将数据显示为:
GINTO || USD || DATE
2222000 || 200 || 2015-03-23
3366000 || 300 || 2015-03-24
11000 || 10 || 2015-03-25
但该查询的结果是:
GINTO || USD || DATE
2222000 || 284.65|| 2015-03-23
3366000 || 284.65|| 2015-03-24
11000 || 284.65|| 2015-03-25
使用USD列显示所有记录的摘要。为什么呢?
答案 0 :(得分:3)
您的count
个调用是在单独的查询中运行的,没有group by
子句,因此它们将应用于整个表格,无论&#34; main&#34;查询的goruping。解决这个问题的一种方法是摆脱子查询并将它们带入&#34; main&#34;查询:
SELECT SUM(price) AS GINTO,
SUM(CASE price WHEN '200000' THEN 9.99
WHEN '60000' THEN 3.99
WHEN '24000' THEN 1.99
WHEN '11000' THEN 0.99
END) AS usd,
DATE_FORMAT(date, '%Y-%m-%d') AS date
FROM sms_logs
WHERE date >='2015-03-20' AND date <= '2015-04-30'
GROUP BY DATE_FORMAT(date,'%Y-%m-%d')
答案 1 :(得分:2)
试试这个
SELECT SUM(price) AS GINTO,
SUM(case when price = '200000' then 1 else 0 end*9.99)+
SUM(case when price = '60000' then 1 else 0 end*3.99)+
SUM(case when price = '24000' then 1 else 0 end*1.99)+
SUM(case when price = '11000' then 1 else 0 end*0.99) AS USD,
DATE_FORMAT(DATE,'%Y-%m-%d') AS DATE FROM sms_logs
WHERE DATE >='2015-03-20' AND DATE <= '2015-04-30'
GROUP BY DATE_FORMAT(DATE,'%Y-%m-%d')
答案 2 :(得分:2)
您可以尝试以下查询 -
SELECT SUM(price) AS GINTO,
(COUNT(IF(price='200000',price,NULL))*9.99 +
COUNT(IF(price='60000',price,NULL))*3.99 +
COUNT(IF(price='24000',price,NULL))*1.99 +
COUNT(IF(price='11000',price,NULL))*0.99) AS USD,
DATE_FORMAT(date_col,'%Y-%m-%d') AS 'Date'
FROM sms_logs
WHERE date_col >='2015-03-20' AND date_col <= '2015-04-30'
GROUP BY DATE(date_col)