从GROUP BY获取最后一个值

时间:2015-09-01 03:37:10

标签: php mysql

我有像

这样的表格
id  Name       Taste      price        Qty
1   Hot-Dog    Spicy      500           3
2   Pop-Corn   Caramel    400           2
3   Hot-Dog    Non-Spicy  600           1      
4   Hot-Dog    Spicy      520           4     
5   Pop-Corn   Salty      350           5

如何制作返回行

Name       Taste      price    Qty
Hot-Dog    Spicy      520       7  <--- Group by name and taste, sum(qty), with lastest price 
Pop-Corn   Caramel    400       2
Hot-Dog    Non-Spicy  600       1
Pop-Corn   Salty      350       5

$sql = mysqli_query($con,"SELECT *,sum(qty) as qtys FROM sometable GROUP BY name,taste");

简单的单词..按照名称和口味返回组,以“最新的价格(最大ID)来自同一项目”和总和(数量)

如何获得最新价格。我尝试min(),max()它返回最小值或最大值。

3 个答案:

答案 0 :(得分:2)

使用order by desc limit 1将是第一个元素。

示例:

select*,sum(qty) as qtys from sometable GROUP BY name ORDER BY id desc LIMIT 1

由于价格是由最新的条目确定的,您只需要按名称选择=&#39;热狗&#39;例如,sum qty,按id desc排序并限制一个结果。

 select*,sum(qty)as qtys, price 
 fromsometable 
 where name ='Hot-Dog'  orderB by  id desc LIMIT 1

希望得到这个帮助。

答案 1 :(得分:1)

你应该按照你的情况递减ORDER BY升序或降序。

"SELECT *,sum(qty) as qtys FROM sometable GROUP BY name ORDER BY price DESC"

有更多的灵活性。点击此处了解更多信息http://www.w3schools.com/sql/sql_orderby.asp

答案 2 :(得分:1)

在MySQL中,您可以引用GROUP BY子句中或聚合函数内的列,但是根据文档https://dev.mysql.com/doc/refman/5.5/en/group-by-handling.html,返回的结果值是不确定的并非完全相同。

但是,您可以分两步执行查询:首先,获取聚合信息,然后将其连接回同一个表以获取最大ID的价格:

SELECT name, taste, price, qtys
FROM (SELECT MAX(id) AS maxid, SUM(qty) AS qtys FROM sometable GROUP BY name, taste) AS lnt
JOIN sometable AS st ON st.id = lnt.maxid
ORDER BY name, taste

解释这是如何工作的:

从内部查询开始。在这里,我们按名称和品味对数据进行分组,然后获取每个(名称,品味)对的数量总和,以及最大ID(这是您的#34;最新&#34;条目之后)。如果我们想从这里获得实际名称和品味值,我们也可以获得实际名称和品味值,但是没有意义,因为我们可以稍后从外部表中获取(最大ID是我们获取名称所需的所有信息)和味道)它简化了SQL。

现在,内部查询将为您提供唯一ID和数量的列表。每个ID都引用一个(名称,品味)对 - 具体来说,是一个具有最大ID(名称,品味)组合的ID。因此,我们将内部查询连接回sometable表,将maxid与id字段匹配。

然后,只需简单地从某个表格中返回名称,品味和价格,以及从内部表格返回qtys,您就拥有了所需的一切 - 名称,品味,&#34;最新&# 34;价格和数量之和。