Выбор вложенных общих атрибутов

#sql #sqlite

#sql #sqlite

Вопрос:

Я использую следующую инструкцию для запроса моей базы данных и возврата наиболее распространенного цвета, стиля элемента a. Как только я получу эти данные, я хотел бы выбрать наиболее распространенный размер.

 select color, style, size
from orders
where item = 'item a'
group by color, style
order by count(*) desc
limit 1
  

Если я сгруппирую по цвету, стилю, размеру, он не будет правильно подсчитывать количество цветов, стилей. Как я могу получить эту последнюю часть информации из базы данных?

Ответ №1:

Честно говоря, трудно представить, как один запрос будет более эффективным, чем три. Но если вам нужно, вы можете объединить их в один запрос с union :

 select  'Common Color' as Id
,       (select color from orders where item = 'item a' group by color 
           order by count(*) desc limit 1) as Value
union all
select  'Common Style'
,       (select style from orders where item = 'item a' group by style 
            order by count(*) desc limit 1)
union all
select  'Common Size'
,       (select size from orders where item = 'item a' group by size 
            order by count(*) desc limit 1)
  

Подзапросы предназначены для устранения любой двусмысленности в отношении того, применяется ли limit ко всему объединению или только к одной части.

Ответ №2:

Используйте второй запрос, чтобы получить наиболее распространенный размер

Комментарии:

1. Есть ли более эффективный способ? Я подумал, что мог бы сделать это в том же операторе.