我有像
这样的表格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()它返回最小值或最大值。
答案 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;价格和数量之和。