【问题标题】:How to compare column values in SQL grouped by one column?如何比较按一列分组的 SQL 中的列值?
【发布时间】:2019-07-23 20:27:23
【问题描述】:

我正在从汽车数据库练习 SQL,我有以下 CAR 表/视图,我需要选择比发动机/摩托车销售更多汽车的品牌。这意味着我必须选择只有 CAR 类型的 UNIT_SOLD 大于 ENGINE OR MOTORCYCLE 的值的行。

BRAND  UNIT_SOLD    TYPE
ACURA   1     MOTORCYCLE
CHEVY   3     ENGINE
CHEVY   1     CAR
DODGE   1     ENGINE
FORD    1     MOTORCYCLE
FORD    1     ENGINE
FORD    3     CAR
NISSAN  1     MOTORCYLE
NISSAN  1     ENGINE
NISSAN  2     CAR
TOYOTA  1     MOTORCYCLE
TOYOTA  3     CAR
VOLVO   3     MOTORCYCLE
VW  2     CAR

例如,在前面的例子中我必须返回:

FORD
NISSAN
TOYOTA
VW

解释:以前的品牌销售的汽车多于发动机/摩托车。 CHEVY 不考虑,因为他们销售 3 台发动机和 1 辆汽车。

我一直在尝试使用条件 SELECT 语句来解决这个问题,但是我不知道这是否是一个好方法。

非常感谢。

SELECT BRAND
 FROM CARS A
WHERE A.TYPE = 'CAR'
 AND A.UNIT_SELLS > (SELECT B.UNIT_SELLS FROM CARS B WHERE B.TYPE = 'ENGINE' AND A.MAKER=B.MAKER)
 OR  A.UNIT_SELLS > (SELECT B.UNIT_SELLS FROM CARS B WHERE B.TYPE = 'MOTORCYCLE' AND A.BRAND=B.BRAND);

SELECT BRAND
 FROM CARS A
WHERE A.TYPE = 'CAR'
 AND A.UNIT_SELLS > (SELECT B.UNIT_SELLS FROM CARS B WHERE B.TYPE = 'ENGINE' AND A.MAKER=B.MAKER)
 OR  A.UNIT_SELLS > (SELECT B.UNIT_SELLS FROM CARS B WHERE B.TYPE = 'MOTORCYCLE' AND A.BRAND=B.BRAND);

目前我能够获得 CAR unit_sold 更大的行,但是我仍然无法获得销售任何数量的汽车并且他们没有出售任何摩托车/发动机的行。

【问题讨论】:

    标签: sql


    【解决方案1】:

    使用条件聚合,您可以获得每个总数并进行比较。

    SQL DEMO

     SELECT brand,
            -- just for debug
            SUM(CASE WHEN TYPE = 'CAR'    THEN UNIT_SOLD ELSE 0 END) as total_cars,
            SUM(CASE WHEN TYPE = 'ENGINE' THEN UNIT_SOLD ELSE 0 END) as total_engines,
            SUM(CASE WHEN TYPE = 'MOTORCYCLE' THEN UNIT_SOLD ELSE 0 END) as total_motorcycles
     FROM cars
     GROUP BY brand
     HAVING SUM(CASE WHEN TYPE = 'CAR'    THEN UNIT_SOLD ELSE 0 END) >
            SUM(CASE WHEN TYPE = 'ENGINE' THEN UNIT_SOLD ELSE 0 END) 
    
        AND SUM(CASE WHEN TYPE = 'CAR'        THEN UNIT_SOLD ELSE 0 END) >
            SUM(CASE WHEN TYPE = 'MOTORCYCLE' THEN UNIT_SOLD ELSE 0 END) 
    

    输出

    |  brand | total_cars | total_engines | total_motorcycles |
    |--------|------------|---------------|-------------------|
    |   FORD |          3 |             1 |                 1 |
    | NISSAN |          2 |             1 |                 0 |
    | TOYOTA |          3 |             0 |                 1 |
    |     VW |          2 |             0 |                 0 |
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 2022-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      相关资源
      最近更新 更多