【问题标题】:group by with max and order按最大和顺序分组
【发布时间】:2015-06-06 16:10:04
【问题描述】:

在这样的表格中:

code        code1   code2   code3   code4
FILA841201  123456  481201  654987  NULL
NULL        123456  481201  1234    NULL
NULL        123456  481201  789014  324324

我只需要得到一行,今天使用这些查询

CREATE TABLE tmp2 (SELECT max(code) as code, code1, max(code2) as code2, max(code3) as code3, max(code4) as code4 FROM tmp1 WHERE code1 IS NOT NULL group by code1);

CREATE TABLE tmp3 (SELECT max(code) as code, max(code1) as code1, code2, max(code3) as code3, max(code4) as code4 FROM tmp1 WHERE code2 IS NOT NULL group by code2);

ecc...为所有列循环

我的问题是,如果一列有不同的值,我必须让位于第一列被填满的那一行。

在此示例中,我必须输出“654987”而不是最大值 (789014)。

我应该得到的结果

code        code1   code2   code3   code4
FILA841201  123456  481201  654987  324324

感谢您的关注

【问题讨论】:

  • 没有“第一行”之类的东西。您是否有一列指定行的顺序?
  • 今天不,希望我能创造它

标签: mysql group-by sql-order-by max


【解决方案1】:

假设您有一列指定行的顺序,您可以使用相关子查询来做到这一点:

select (select code from tmp1 where code is not null order by id limit 1) as code,
       (select code1 from tmp1 where code1 is not null order by id limit 1) as code1,
       (select code2 from tmp1 where code2 is not null order by id limit 1) as code2,
       (select code3 from tmp1 where code3 is not null order by id limit 1) as code3,
       (select code4 from tmp1 where code4 is not null order by id limit 1) as code4 

【讨论】:

  • 在这种情况下,如果我有不同的值,它将创建两行,如果不同,我需要忽略连续的值..
  • @user2069604 。 . .此查询不可能返回多于一行。
  • 这个查询生成了一个与第一个几乎相同的表,但仍然没有工作,因为没有分组依据。使用我现在使用的系统从 95.000 到 18.500 条记录,但是我有我之前说过的问题,如果任何人有第一列被重视,如果他们不同,则必须在他自己的列的其他人上具有优先权跨度>
  • @user2069604 。 . .您是否注意到此答案中的查询没有 from 子句。它不能返回多于一行。
猜你喜欢
  • 2021-12-17
  • 2021-11-14
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 2018-04-18
  • 2016-06-19
  • 1970-01-01
  • 2020-10-21
相关资源
最近更新 更多