Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL查询和子查询_Php_Mysql_Sql_Select_Subquery - Fatal编程技术网

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)