【问题标题】:MYSQL - Group by and Order ByMYSQL - 分组依据和排序依据
【发布时间】:2016-05-27 07:46:09
【问题描述】:

我有一张这样的桌子:

ID    Field1    Field2    Field3
1     Apple     Fruit     Cheap
2     Apple     Fruit     Eatable
3     Apple     Food      Something
4     Banana    Fruit     Cheap
5     Banana    Food      Eatable
6     Cat       Pet       Weird
7     Cat       Pet       Friend
8     Cat       Pet       Amazing
9     Cat       Animal    Cheap

我想获得不同的 Field1、Field 2 元素并按包含“Cheap”的 Field3 排序。 我期待这个:

ID    Field1    Field2    Field3
1     Apple     Fruit     Cheap
4     Banana    Fruit     Cheap
9     Cat       Animal    Cheap
3     Apple     Food      Something    
5     Banana    Food      Eatable
6     Cat       Pet       Weird

结果有 ID=2,7,8 的行被删除,因为 ID=2 具有相同的 field1,field2 与 ID=1 和 ID=7,8 具有相同的 field1,field2 与 ID=6。 ID = 1 和 ID = 2 具有相同的 Field1 和 Field2。 ID = 6,7,8 中只有一个会因为具有不同的 Field1、Field2 而进入结果。

我已经尝试过“分组”和“按字段()排序”,但是因为“分组”所需的行被淘汰了。例如,分组后 ID = 1 不存在,而 ID = 2 行存在。

我目前的查询是:

select * from tbl
group by field1,field2
order by field(field3,"CHEAP") desc;

仅给我两行 field3="Cheap" 作为“分组依据”正在考虑 ID=2 而不是 ID=1

谁能帮我解决这个问题?

提前致谢。

【问题讨论】:

  • 您的查询是什么?
  • 为什么要删除 2 而不是 1?
  • 我想确保结果中包含 field3 = "Cheap" 的所有行。我想我应该使用某种子查询而不是 group by。
  • 为什么要在第三个字段中显示记录为Cheap的数据时要对第一个和第二个字段进行分组?
  • 只是试图区分第一个和第二个字段并按第三个字段排序。我不确定正确的方法。

标签: mysql sql


【解决方案1】:

试试这个:

SELECT t1.ID, t1.Field1, t1.Field2, t1.Field3
FROM mytable AS t1
JOIN (
  SELECT Field1, Field2, MAX(Field3) AS min_field3,
         COUNT(CASE WHEN Field3 = 'Cheap' THEN 1 END) AS cnt_cheap
  FROM mytable
  GROUP BY Field1, Field2
) AS t2 ON t1.Field1 = t2.Field1 AND 
           t1.Field2 = t2.Field2 AND
           t1.Field3 = IF(t2.cnt_cheap = 1, 'Cheap', min_field3)
ORDER BY FIELD(Field3, 'Cheap') DESC 

上述查询从Field1, Field2 组中选择“便宜”记录,如果这样的记录存在,则选择具有最大Field3 值的记录。

【讨论】:

  • @rohan 我的查询返回给定样本数据的预期结果。如果Field3 对给定的Field1, Field2 对重复多次,您可能会得到重复。
  • 非常感谢。欣赏!
【解决方案2】:

你也可以试试这个

 select id,field1,field2,field3
 from tabel1 
 group by field3
 order by field1 DECS and field2 DECS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    相关资源
    最近更新 更多