MySQL - 如何GROUP BY文本内容?

时间:2016-04-13 19:16:24

标签: mysql sql select count having

我有一个类似于此的简单表。有些制造商生产不同类型的汽车;每辆车都有型号(唯一钥匙)

maker   type    model
A       VAN      111
A       VAN      112
A       SEDAN    113
A       SUV      114
A       SUV      115
B       VAN      116
B       SUV      117
C       SEDAN    118
C       SEDAN    119
C       SEDAN    120
D       VAN      121
E       VAN      122
E       VAN      123
E       SEDAN    124
E       SUV      125

如何选择只生产一种汽车和多种型号的制造商?我真的绞尽脑汁想要做一个这样做的方法。我认为GROUP BY和HAVING子句与COUNT()函数相关,但是如果尝试:

SELECT maker, type 
FROM table 
GROUP BY maker, type 
HAVING COUNT(type) = 1 

它返回A-SEDANB-VAN等内容(因为它们只有一个模型),这不是我需要的。我需要在'type'列中获得一个具有相同值的行,同时拥有多个模型。

1 个答案:

答案 0 :(得分:1)

  

如何选择只生产一种汽车和多种型号的制造商?

您可以使用:

SELECT maker, MAX(type) AS type
FROM tab
GROUP BY maker
HAVING COUNT(DISTINCT TYPE) = 1
   AND COUNT(DISTINCT MODEL) > 1;

LiveDemo

输出:

╔═══════╦═══════╗
║ maker ║ type  ║
╠═══════╬═══════╣
║ C     ║ SEDAN ║
╚═══════╩═══════╝