mysql - 订购 Group BY

标签 mysql sql

关于这个主题有很多问题,仍然无法找到解决这个问题的方法。

我正在做的查询是:

SELECT `b`.`ads_id`     AS `ads_id`,
  `b`.`bod_bedrag`      AS `bod_bedrag`,
  `a`. `ads_naam`       AS `ads_naam`,
  `a`.`ads_url`         AS `ads_url`,
  `a`.`ads_prijs`       AS `ads_price`,
  `i`.`url`             AS `img_url`,
  `c`.`url`             AS `cat_url`
FROM `ads_market_bids`  AS `b`
INNER JOIN `ads_market` AS `a`
ON `b`.`ads_id` = `a`.`id`
INNER JOIN `ads_images` AS `i`
ON `b`.`ads_id` = `i`.`ads_id`
INNER JOIN `ads_categories` AS `c`
ON `a`.`cat_id`       = `c`.`id`
WHERE `i`.`img_order` = '0'
AND `b`.`u_id`        = '285'
GROUP BY `b`.`ads_id`
HAVING MAX(b.bod_bedrag)
ORDER BY `b`.`bod_bedrag` ASC

但是,我一直看到的问题是我需要在 GROUP BY 发生之前对 b.bod_bedrag 进行排序。不知道怎么解释。

我现在得到的 bod_bedrag 是表格中最低的出价。我需要最高的。

像所有方法一样尝试过,甚至不使用 DISTINCT 进行分组。这也没有用。尝试按最大顺序订购,我知道或可以在互联网上找到的一切。

图1是没有group by的情况。 Order By 效果很好 (ofc)。 No Group By 图 2 是分组依据。如您所见,最低出价被视为 bod_bedrag。我需要最高的。 With Group By

最佳答案

根据你想要的输出来判断:

  SELECT amb.ads_id,
         MAX(amb.bod_bedrag) max_bod_bedrag,
         am.ads_naam,
         am.ads_url,
         am.ads_prijs ads_price,
         ai.url img_url,
         ac.url cat_url
    FROM ads_market_bids amb 
    JOIN ads_images ai 
      ON ai.ads_id = amb.ads_id
     AND ai.img_order = 0
    JOIN ads_market am 
      ON am.id = amb.ads_id 
    JOIN ads_categories ac
      ON ac.id = am.cat_id 
   WHERE amb.u_id = 285 
GROUP BY amb.ads_id, 
         am.ads_naam,
         am.ads_url,
         am.ads_prijs,
         ai.url,
         ac.url
ORDER BY max_bod_bedrag ASC

我还删除了所有不必要的反引号和同名列的别名。 您的 HAVING 没有做任何事情,因为所有组都“拥有”一个 MAX(amb.bod_rag)

关于mysql - 订购 Group BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25308181/

相关文章:

mysql - 触发器上的 SQL 语法错误

mysql - 如何判断 MySQL 表的最后更新时间?

mysql - 如何在此示例中使用 INNER JOIN

php - 如何在表格内使用动态创建的复选框

php - 复选框检查数据库数据

PHP 为下一个查询获取上一个 MySQL 查询的 ID,如何?

mysql - 连接两个表时如何避免重复值?

php - 如何从 SQL 查询 php 获取值并将其存储到变量中

php - 如何使用pdo从sql中删除数据?

php - 如何为数据库中的列插入新名称