2016-04-13 3 views
1

У меня есть простая таблица, подобная этому. Существуют производства, которые производят различные типы автомобилей; и каждый автомобиль имеет номер модели (уникальный ключ)MySQL - Как получить текстовое содержимое GROUP BY?

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-SEDAN и B-VAN (потому что у них есть только одна модель), которая является не то, что мне нужно. Мне нужно получить строку, которая имеет такое же значение в столбце «тип», имея несколько моделей.

ответ

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 ║ 
╚═══════╩═══════╝ 
+1

Бог ты удивительна. Большое спасибо! Мне действительно еще предстоит пройти долгий путь. –

+0

@ViktorPoliakov Вы можете [принять мой ответ] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235), если ваш вопрос решен :) – lad2025

+1

Я только что сделал. Я был так переполнен эмоциями. Благодаря:) –