尽管由于mysql优化器的工作方式,要将其用于连接,需要使用这种笨拙的内部连接顺序条件。 这是一个快速的解决方案,即使是一个相当大的表。如果选择足够的话,您也可以考虑在合并上添加索引。< /P>返回出租单元名设置为合并= 1 的所有出租单元。您的查询与我上

尽管由于mysql优化器的工作方式,要将其用于连接,需要使用这种笨拙的内部连接顺序条件。 这是一个快速的解决方案,即使是一个相当大的表。如果选择足够的话,您也可以考虑在合并上添加索引。< /P>返回出租单元名设置为合并= 1 的所有出租单元。您的查询与我上,mysql,sql,group-by,min,Mysql,Sql,Group By,Min,尽管由于mysql优化器的工作方式,要将其用于连接,需要使用这种笨拙的内部连接顺序条件。 这是一个快速的解决方案,即使是一个相当大的表。如果选择足够的话,您也可以考虑在合并上添加索引。< /P>返回出租单元名设置为合并= 1 的所有出租单元。您的查询与我上面的第一个查询不同之处在于有一个min\u rent列。你的SQL查询:。啊,我明白了。我应该更仔细地阅读你的问题。我会发布更新;这是可行的。你能在Fiddle@hungerstar中尝试上面的查询吗?它返回您的预期结果,但有两个例外:ID#2

尽管由于mysql优化器的工作方式,要将其用于连接,需要使用这种笨拙的内部连接顺序条件。
这是一个快速的解决方案,即使是一个相当大的表。如果选择足够的话,您也可以考虑在合并上添加索引。< /P>返回出租单元名设置为<代码>合并= 1 的所有出租单元。您的查询与我上面的第一个查询不同之处在于有一个
min\u rent
列。你的SQL查询:。啊,我明白了。我应该更仔细地阅读你的问题。我会发布更新;这是可行的。你能在Fiddle@hungerstar中尝试上面的查询吗?它返回您的预期结果,但有两个例外:ID#2和ID#8也包括在内,因为它们分别与ID#1和ID#7绑定为最低租金。这足够近了吗?这确实有效,我有一个不同的查询做同样的事情,但理想的解决方案是删除重复项,但在重复项出现时保持此查询的顺序。您可以通过选择
MIN(ru.id)
而不是第一行中的
ru.id
,然后按run.name添加一个整体
组来实现这一点,ru.租金,ru.卧室
。有一个新的SQL FIDLE与您的结果相匹配。它返回出租单元名称设置为
merge=1
的所有出租单元。您的查询与我上面的第一个查询不同之处在于有一个
min\u rent
列。你的SQL查询:。啊,我明白了。我应该更仔细地阅读你的问题。我会发布更新;这是可行的。你能在Fiddle@hungerstar中尝试上面的查询吗?它返回您的预期结果,但有两个例外:ID#2和ID#8也包括在内,因为它们分别与ID#1和ID#7绑定为最低租金。这足够近了吗?这确实有效,我有一个不同的查询做同样的事情,但理想的解决方案是删除重复项,但在重复项出现时保持此查询的顺序。您可以通过选择
MIN(ru.id)
而不是第一行中的
ru.id
,然后按run.name添加一个整体
组来实现这一点,ru.租金,ru.卧室
。有一个新的SQL FIDLE与您的结果相匹配。我知道它可以自由选择值。你怎么纠正呢?啊。非常聪明!我的数据库不是太大,所以我认为使用这些额外功能不会对性能造成太大的影响?一个问题。第一行的和
id
应为1。这将导致
id
为2。我可以自由选择值。你怎么纠正呢?啊。非常聪明!我的数据库不是太大,所以我认为使用这些额外功能不会对性能造成太大的影响?一个问题。第一行的和
id
应为1。这导致
id
为2。
SELECT ru.id, run.name, ru.rent, ru.bedrooms
FROM rental_units AS ru
JOIN rental_unit_names AS run
on run.id = ru.name_id
WHERE run.merge = 1
ORDER BY run.name ASC, ru.bedrooms ASC, ru.rent ASC
SELECT ru.id, run.name, ru.rent, MIN(ru.rent) AS min_rent, ru.bedrooms
FROM rental_units AS ru
JOIN rental_unit_names AS run
on run.id = ru.name_id
WHERE run.merge = 1
GROUP BY ru.name_id, ru.bedrooms
ORDER BY run.name ASC, ru.bedrooms ASC, ru.rent ASC, ru.id ASC
SELECT ru.id, run.name, ru.rent, ru.bedrooms
FROM rental_units ru
JOIN rental_unit_names run ON run.id = ru.name_id
WHERE run.merge = 1
  AND (run.name, ru.bedrooms, ru.rent) IN (
    SELECT inrun.name, inru.bedrooms, MIN(inru.rent)
    FROM rental_units inru
    JOIN rental_unit_names inrun ON inrun.id = inru.name_id
    WHERE inrun.merge = 1
    GROUP BY inrun.name, inru.bedrooms)
SELECT MIN(ru.id) AS ru_id, run.name, ru.rent, ru.bedrooms
FROM rental_units ru
JOIN rental_unit_names run ON run.id = ru.name_id
WHERE run.merge = 1
  AND (run.name, ru.bedrooms, ru.rent) IN (
    SELECT inrun.name, inru.bedrooms, MIN(inru.rent)
    FROM rental_units inru
    JOIN rental_unit_names inrun ON inrun.id = inru.name_id
    WHERE inrun.merge = 1
    GROUP BY inrun.name, inru.bedrooms)
GROUP BY run.name, ru.rent, ru.bedrooms
SELECT substring_index(group_concat(ru.id order by rent), ',', 1) as id,
       run.name, MIN(ru.rent) AS min_rent, ru.bedrooms
FROM rental_units ru JOIN
     rental_unit_names run
     on run.id = ru.name_id
WHERE run.merge = 1
GROUP BY ru.name_id, ru.bedrooms
ORDER BY run.name ASC, ru.bedrooms ASC, ru.rent ASC, ru.id ASC
SELECT min(ru.id) as id, run.name, ru.rent, ru.rent AS min_rent, ru.bedrooms
FROM rental_units AS ru
JOIN rental_unit_names AS run
on run.id = ru.name_id
WHERE run.merge = 1
and ru.rent = 
(select min(ru1.rent) from rental_units AS ru1
JOIN rental_unit_names AS run1
on run1.id = ru1.name_id
where run.name = run1.name
and ru.bedrooms = ru1.bedrooms
and run1.merge = 1)
group by run.name, ru.rent,min_rent, ru.bedrooms
ORDER BY run.name ASC, ru.bedrooms ASC, ru.rent ASC, ru.id ASC;
SELECT ro.id, run.name, ro.rent, ro.bedrooms
FROM 
( SELECT name_id, bedrooms, MIN(rent) AS cheapest_rent
  FROM rental_units 
  GROUP BY name_id, bedrooms ) AS ru
JOIN rental_units ro
ON ro.id = ( SELECT ri.id FROM rental_units ri
              WHERE ri.name_id = ru.name_id
              AND ri.bedrooms = ru.bedrooms
              AND ri.rent = ru.cheapest_rent
              ORDER BY ri.name_id, ri.bedrooms, ri.rent, ri.id
              LIMIT 1 )
JOIN rental_unit_names run ON ro.name_id = run.id
WHERE run.merge = 1
ORDER BY run.name ASC, ro.bedrooms ASC, ro.rent ASC