首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL分组依据和不确定的结果

MySQL分组依据和不确定的结果
EN

Stack Overflow用户
提问于 2018-11-12 16:17:58
回答 1查看 74关注 0票数 0

我一直在研究如何正确使用MySQL Group By和Joins来避免其他列中非聚合值的不确定值。现在,使用下面的查询,当我按客户ID分组时,如何确保选择了正确的Vin编号,并且试驾时间最短?基本上,我如何确保获得与最小测试驱动时间相关的整个行?

代码语言:javascript
复制
  SELECT t1.ID AS CUSTOMERID, t1.carhash, 
             MIN(t1.testdrivetime) AS testdrivetime,
               t2.vinnumber AS vinnumber

               FROM TABLE1 t1

        INNER JOIN TABLE2 t2 ON t2.vinnumber = t1.carhash

INNER JOIN (SELECT t1.ID, MIN(testdrivetime) AS testdrivetime
        FROM TABLE1
        GROUP BY t1.ID) f
    ON f.ID = t1.ID AND f.testdrivetime = t1.testdrivetime

GROUP BY ID

数据库中的次数:

代码语言:javascript
复制
|---------------------|------------------|-------------------------|
|          ID         |      carhash     |       testdrivetime     |
|---------------------|------------------|-------------------------|
|          12         |         345      |           2:22          |
|---------------------|------------------|-------------------------|
|          12         |         277      |           4:51          |
|---------------------|------------------|-------------------------|

上面查询的输出(错误的汽车散列,因为它是不确定的):

代码语言:javascript
复制
|---------------------|------------------|-------------------------|
|          ID         |      carhash     |       testdrivetime     |
|---------------------|------------------|-------------------------|
|          12         |         277      |           2:22          |
|---------------------|------------------|-------------------------|

我想要的输出:(使用来自同一行的正确的carhash作为最小试驾时间)

代码语言:javascript
复制
|---------------------|------------------|-------------------------|
|          ID         |      carhash     |       testdrivetime     |
|---------------------|------------------|-------------------------|
|          12         |         345      |           2:22          |
|---------------------|------------------|-------------------------|
EN

回答 1

Stack Overflow用户

发布于 2018-11-12 17:11:32

在子选择查询(Derived Table)中,确定每个ID.

  • Join的最小testdrivetime值此结果集使用IDtestdrivetime返回到主表,以获取与最小testdrivetime值对应的行。

尝试:

代码语言:javascript
复制
SELECT 
  t.* 
FROM your_table AS t 
JOIN 
(
  SELECT 
    ID, 
    MIN(testdrivetime) AS min_testdrivetime 
  FROM your_table 
  GROUP BY ID
) AS dt 
  ON dt.ID = t.ID AND 
     dt.min_testdrivetime = t.testdrivetime 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53258165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档