Может ли кто-то объяснить SQL запрос?

Решение для задания
Найти производителей, которые выпускают более одной модели, при этом все выпускаемые производителем модели являются продуктами одного типа.
Вывести: maker, type

SELECT maker, type FROM Product 
WHERE maker IN 
( SELECT maker  
FROM 
( SELECT maker, type FROM Product GROUP BY maker, type )
 x GROUP BY maker HAVING count(*)=1 )  
GROUP BY maker, type HAVING count(*)>1


Объясните, пожалуйста, что-за крестик перед GROUP BY. Да и вообще как всё это будет на русском
  • Вопрос задан
  • 9525 просмотров
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вот поэтому и не надо пропускать опциональные ключевые слова (AS), да и обратные апострофы тоже не мешают:
SELECT `maker`, `type` 
    FROM `Product`
    WHERE `maker` IN ( 
        SELECT `maker` 
            FROM ( 
                SELECT `maker`, `type` 
                    FROM `Product` 
                    GROUP BY `maker`, `type`
            ) AS `x`
            GROUP BY `maker` 
            HAVING COUNT(*) = 1
    )
    GROUP BY `maker`, `type`
    HAVING COUNT(*) > 1
Ответ написан
Комментировать
x - это алиас для подзапроса, так понятнее будет:
SELECT maker, type
FROM Product 
WHERE maker IN (
        SELECT maker  
        FROM (
                SELECT maker, type
                FROM Product GROUP BY maker, type
            ) x
        GROUP BY maker HAVING count(*)=1
    )  
GROUP BY maker, type HAVING count(*)>1
Ответ написан
Комментировать
azrail_dev
@azrail_dev
Не знаю как в Mysql, но походу это просто проименовали запрос. Попробуй убери X, ничего измениться не должно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы