【问题标题】:Using distinct and/or group by to filter select使用 distinct 和/或 group by 过滤选择
【发布时间】:2012-02-08 09:26:40
【问题描述】:

我还有一个关于 distinct 和/或 group by 的问题。我的表如下:

|   art   |   ean             |   obs   |   vke   |
---------------------------------------------------
|  type    |  1234567890123   |    1    |   100   |
|  type    |  1234567890123   |    0    |   50    |
|  type    |  1234567890123   |    0    |   60    |
|  type    |  1234567890123   |    0    |   70    |

我需要查询始终选择 obs = 1 的行,并且只选择 obs = 0 的行中最便宜的行。根本不应列出所有其他相等的 EAN。这可能吗?

所以结果应该是:

|  type    |  1234567890123   |    1    |   100   |
|  type    |  1234567890123   |    0    |   50    |

【问题讨论】:

    标签: mysql group-by distinct


    【解决方案1】:
    select art, ean, obs, vke 
    from table_name
    where obs = 1
    union all
    select art, ean, obs, min(vke) as vke
    from table_name
    where obs = 0
    group by art, ean, obs
    

    我将union 两个结果第一个是所有行与obs aquals 1 和第二个所有行由arteanobs 分组与obs 等于0min 的值为vke

    详细了解uniongroup by

    【讨论】:

      【解决方案2】:
      SELECT art, ean, obs, vke
      FROM table_name
      WHERE obs = 1
      UNION ALL
      (
          SELECT art, ean, obs, vke
          FROM table_name
          WHERE obs = 0
          ORDER BY vke
          LIMIT 1
      )
      

      【讨论】:

      • 你好——又是类似的问题:
      猜你喜欢
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      相关资源
      最近更新 更多