php - 每组的最小值和最大值

标签 php mysql sql

我有两个表

位置:

  • location_id
  • 地址

itrans文件:

  • 编号
  • 交易编号
  • location_id
  • 项目名称
  • 数量

我想按位置获取最大和最小销售量。

HighestItemName     HighQauntity    LowestItemName      LowQuantity     LocationName

Chicken Burger      50              Tako                5               Gulshan
Chicken Burger      100             Tikka               10              Nipa
Pasta               150             Cheese Burger       12              Liyari
Pizza               200             Chicken Burger      3               F.B.Area

到目前为止我完成的查询:

SELECT t.itemName as HighestItemName, sum(t.quantity) as HighQuantity, l.address LocationName
    from itransfile as t join locations as l
    on t.location_id = l.location_id 
    where t.location_id IN(1,2,3,4)
    group by t.location_id

我不知道如何从每个组中获取 maxmin 项。

示例数据:

ID  TransNumber ItemName        Quantity location_id
1   1234        Chicken Burger  3           1
2   1234        Cheese Burger   1           1
3   1235        Sandwich        4           2
4   1332        Salad           1           4
5   14537       Tikka           1           3   
6   1236        Roll            3           2
7   1333        Biryani         2           4


location_id     address
1               Gulshan
2               Nipa
3               Liyari
4               F.B.Area

最佳答案

如果您在一个查询中需要它,这就是您可能要查找的内容 (SQLFiddle):

select
  l.address,
  imax.itemName max_item, max_min.max_q,
  imin.itemName min_item, max_min.min_q
FROM
  (select
    i.location_id, MAX(i.quantity) max_q, MIN(i.quantity) min_q
  FROM
    itransfile i
  GROUP BY
    i.location_id) as max_min
  LEFT JOIN itransfile imax ON (max_min.max_q = imax.quantity)
  LEFT JOIN itransfile imin ON (max_min.min_q = imin.quantity)
  LEFT JOIN location l ON (max_min.location_id = l.location_id)
GROUP BY
  l.location_id

它查找最小/最大值,然后查找项目名称和位置地址。 GROUP_CONCAT 确保当有更多具有相同最小/最大数量的项目时,您将获得所有这些项目。

或者,如果您需要进一步处理它们,您可以去掉 GROUP BYGROUP_CONCAT 并获取行中的所有项目。

关于php - 每组的最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30075816/

相关文章:

php - 合并 MySQl 行作为结果,其中数据是最新的

sql - 配置单元 SQL : Other ways to delete rows with a similar ID

mysql - 如何从给定的表中删除那些教师工资低于相应部门平均工资的元组?

php - 根据一个外键验证重复数据

javascript - 如何为 PhoneGap 创建服务器端登录?

php - 如何替换 eregi()

mysql - 如何删除串联时的 NULL 结果

php - 在 SQL 中搜索列中的数据行

java - 如何将字段插入 mysql 数据库,但如果重复则跳过一两列?

php - 为什么我的查询返回不正确的结果?