#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. Есть ли более эффективный способ? Я подумал, что мог бы сделать это в том же операторе.