【问题标题】:Subquery I cant Figure it out子查询我想不通
【发布时间】:2017-03-14 00:34:19
【问题描述】:

所以我被困在一个我试图解决的问题上。我试图 “选择最常见的交付类型的描述”。 我执行它,但我没有得到回报。我什至尝试用交付类型 ID 替换计数,但即便如此我也没有收到任何输出。我做错了什么?

Select DeliveryTypeDescription 
from DeliveryType 
group by DeliveryTypeDescription 
having count(*) >ALL(
      Select count(*) 
      from   DeliveryType 
      group by   DeliveryTypeID)

【问题讨论】:

标签: sql sql-server database subquery


【解决方案1】:
Select Top 1 DeliveryTypeDescription
 From  DeliveryType 
 Group By DeliveryTypeDescription 
 Order By count(*) Desc

【讨论】:

  • 感谢您的回答,但有没有办法使用子查询来做到这一点?
  • @KristianAbenojar - 为什么要使用子查询?
  • 这是已提出的答案的最佳解决方案。不需要子查询。 @KristianAbenojar 。 . .如果您有不同的问题,那么您应该在接受此答案后将其作为问题提出。
  • 会做,但标题为“我无法弄清楚的子查询”
【解决方案2】:

在您的情况下,交付类型将是主键,因此计数永远不会超过 1?

IF OBJECT_ID('tempdb..#DeliveryType') IS NOT NULL DROP TABLE #DeliveryType
CREATE TABLE #DeliveryType (DeliveryTypeID INT,DeliveryType VARCHAR(20),DeliveryTypeDescription VARCHAR(200))
INSERT INTO #DeliveryType VALUES(101,'Home','Home Delivery'),(102,'Work','Work Delivery'),(103,'Ref','Deliver to Reference'),(104,'Pick','Pickup');

SELECT DeliveryTypeDescription FROM #DeliveryType GROUP BY DeliveryTypeDescription HAVING COUNT(*) > ALL (     SELECT COUNT(*)     FROM #DeliveryType    GROUP BY DeliveryTypeID);

在这种情况下,

SELECT COUNT(*)
FROM #DeliveryType
GROUP BY DeliveryTypeID

将返回所有 1,1,1,1

【讨论】:

    【解决方案3】:
    Select DeliveryTypeDescription 
    from DeliveryType 
    group by DeliveryTypeDescription 
    having **count(*)** **>**ALL(
          **Select count(*)** 
          from   DeliveryType 
          group by   DeliveryTypeID)
    

    您正在检索所有行,对吗?所以我认为你必须使用'>='而不是'>'。

    【讨论】:

    • 最后我需要最常用的一行描述。当我添加 '>=' 时,它将填充所有行,但不会填充包含最常用的 deliveryType 的行
    • 如果你尝试“有 count(*)+1”?事实是,仅使用 ">" 运算符是行不通的。
    【解决方案4】:

    好的,所以我想出了使用子查询解决此问题的方法。首先,我的问题是我没有考虑客户使用的最常见交付类型的关系。具有外键的相关表位于“客户文件表”中。因此,我所要做的就是在“CustomerPaper”表中找到最大数量的 DeliverTypeID。

    SELECT  DeliveryType.DeliveryTypeDescription FROM DeliveryType 
    INNER JOIN CustomerPaper
    ON DeliveryType.DeliveryTypeID = CustomerPaper.DeliveryTypeID
    GROUP BY DeliveryType.DeliveryTypeDescription
    HAVING COUNT(CustomerPaper.DeliveryTypeID) >=ALL
    (SELECT COUNT(customerpaper.DeliveryTypeID) FROM CustomerPaper GROUP BY CustomerPaper.DeliveryTypeID)         
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 2015-06-08
      • 2021-12-15
      • 1970-01-01
      相关资源
      最近更新 更多