Php 如何在mysql查询中添加多个限制?

Php 如何在mysql查询中添加多个限制?,php,mysql,Php,Mysql,我想在一个查询中从一个表中选择最后200100行和50行收盘价的总和。 下面给出了200行的查询 SELECT SUM(Close_price) as tot200 FROM cash_data ORDER BY date_added LIMIT 0,200 有人能帮我吗 若要在单个选择中不使用任何子选择,可以使用排序变量并有条件地求和 SELECT @rank := @rank + 1, SUM(case when @rank <= 50 then Close_pri

我想在一个查询中从一个表中选择最后200100行和50行收盘价的总和。 下面给出了200行的查询

SELECT SUM(Close_price) as tot200 FROM cash_data ORDER BY date_added LIMIT 0,200 

有人能帮我吗

若要在单个选择中不使用任何子选择,可以使用排序变量并有条件地求和

SELECT @rank := @rank + 1, 
       SUM(case when @rank <= 50 then Close_price else 0 end) as top_50_sum, 
       SUM(case when @rank <= 100 then Close_price else 0 end) as top_100_sum,
       SUM(case when @rank <= 200 then Close_price else 0 end) as top_200_sum
FROM cash_data 
cross join (select @rank := 0) r
ORDER BY date_added 
LIMIT 0,200 

要在单个选择中不使用任何子选择,可以使用排序变量并有条件地求和

SELECT @rank := @rank + 1, 
       SUM(case when @rank <= 50 then Close_price else 0 end) as top_50_sum, 
       SUM(case when @rank <= 100 then Close_price else 0 end) as top_100_sum,
       SUM(case when @rank <= 200 then Close_price else 0 end) as top_200_sum
FROM cash_data 
cross join (select @rank := 0) r
ORDER BY date_added 
LIMIT 0,200 

您可以使用子查询-

SELECT 
(SELECT SUM(Close_price) FROM cash_data ORDER BY date_added LIMIT 0,200) as tot200, 
(SELECT SUM(Close_price) FROM cash_data ORDER BY date_added LIMIT 0,100)  as tot100,
(SELECT SUM(Close_price) FROM cash_data ORDER BY date_added LIMIT 0,50)  as tot50

您可以使用子查询-

SELECT 
(SELECT SUM(Close_price) FROM cash_data ORDER BY date_added LIMIT 0,200) as tot200, 
(SELECT SUM(Close_price) FROM cash_data ORDER BY date_added LIMIT 0,100)  as tot100,
(SELECT SUM(Close_price) FROM cash_data ORDER BY date_added LIMIT 0,50)  as tot50

谢谢你的回复。事实上,两个答案都有效,但我选择了第二个,并根据需要做了一些更改。下面是最后一个查询

SELECT 
(SELECT SUM(Close_price)/200 FROM (SELECT Close_price FROM cash_data WHERE SERIES='$series' AND SYMBOL='$symbol' AND date_added <= '$date' ORDER BY date_added DESC LIMIT 0,200) as tot200) as avg200, 
(SELECT SUM(Close_price)/100 FROM (SELECT Close_price FROM cash_data WHERE SERIES='$series' AND SYMBOL='$symbol' AND date_added <= '$date' ORDER BY date_added DESC LIMIT 0,100) as tot100) as avg100,
(SELECT SUM(Close_price)/50 FROM (SELECT Close_price FROM cash_data WHERE SERIES='$series' AND SYMBOL='$symbol' AND date_added <= '$date' ORDER BY date_added DESC LIMIT 0,50) as tot50) as avg50

谢谢大家。

谢谢大家的回复。事实上,两个答案都有效,但我选择了第二个,并根据需要做了一些更改。下面是最后一个查询

SELECT 
(SELECT SUM(Close_price)/200 FROM (SELECT Close_price FROM cash_data WHERE SERIES='$series' AND SYMBOL='$symbol' AND date_added <= '$date' ORDER BY date_added DESC LIMIT 0,200) as tot200) as avg200, 
(SELECT SUM(Close_price)/100 FROM (SELECT Close_price FROM cash_data WHERE SERIES='$series' AND SYMBOL='$symbol' AND date_added <= '$date' ORDER BY date_added DESC LIMIT 0,100) as tot100) as avg100,
(SELECT SUM(Close_price)/50 FROM (SELECT Close_price FROM cash_data WHERE SERIES='$series' AND SYMBOL='$symbol' AND date_added <= '$date' ORDER BY date_added DESC LIMIT 0,50) as tot50) as avg50

谢谢大家。

结果应该是?@juergen d我刚刚编辑了我的问题,请检查一下。我想要这样的结果:tot200,tot100和tot50。结果应该是?@juergen d我刚刚编辑了我的问题,请检查一下。我想要这样的结果,总共200、100和50。谢谢@juergen d。我会试试看,然后告诉你结果。谢谢@juergen d。我会试试看,然后告诉你结果。