Php MySQL查询和子查询
我有这样一个问题:Php MySQL查询和子查询,php,mysql,sql,select,subquery,Php,Mysql,Sql,Select,Subquery,我有这样一个问题: 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')+ (SELE
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 || 284.65|| 2015-03-23
3366000 || 284.65|| 2015-03-24
11000 || 284.65|| 2015-03-25
USD列显示所有记录的摘要。为什么?试试这个
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')
选择SUM(price)作为GINTO,
总和(价格为“200000”时,则为1,否则为0结束*9.99)+
总和(价格为“60000”时,则为1,否则为0结束*3.99)+
总和(当价格为“24000”时,则为1,否则为0结束*1.99)+
以美元表示的金额(价格为11000,则为1,否则为0结束*0.99),
日期\u格式(日期,%Y-%m-%d')作为sms \u日志中的日期
其中DATE>='2015-03-20'和DATE您的count
调用在单独的查询中运行,没有group by
子句,因此它们应用于整个表,而不考虑“main”查询的占用。解决此问题的一种方法是去掉子查询并将它们放入“主”查询:
选择SUM(price)作为GINTO,
金额(当“200000”时,则为9.99
当‘60000’时,则为3.99
当“24000”时,则为1.99
当“11000”时,则为0.99
(完)美元,,
日期\u格式(日期,%Y-%m-%d')作为日期
从sms_日志
其中日期>='2015-03-20'和日期您可以在下面的查询中尝试-
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)
选择SUM(price)作为GINTO,
(计数(如果(价格=200000',价格为空))*9.99+
计数(如果(price='60000',price,NULL))*3.99+
计数(如果(price='24000',price,NULL))*1.99+
以美元计算(如果(价格=11000',价格为空))*0.99,
日期格式(日期列,%Y-%m-%d')为“日期”
从sms_日志
如果date_col>='2015-03-20'和date_col,您需要提供一些样本数据和预期结果集的逻辑,最好是中的样本数据
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')
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)