2016-03-27 4 views
1

QUERY 1:выберите записи, имеющие максимальное количество поля

SELECT MaxTable.Customer, 
     MaxTable.Product, 
     Count(MaxTable.Product) AS CountOfProduct 
FROM MaxTable 
GROUP BY MaxTable.Customer, MaxTable.Product 

Это создаст производную таблицу, и я хочу, чтобы назвать это Product_count_query

QUERY 2:

SELECT Product_count_query.Customer, 
     Max(Product_count_query.CountOfProduct) AS MaxOfCountOfProduct 
FROM Product_count_query 
GROUP BY Product_count_query.Customer; 

Это будет создать производную таблицу, и я хочу назвать ее max_customer_count

QUERY 3:

SELECT Product_count_query.Customer, 
     Product_count_query.Product, 
     Product_count_query.CountOfProduct 
FROM Max_Customer_Count 
INNER JOIN Product_count_query ON 
     (Max_Customer_Count.MaxOfCountOfProduct = Product_count_query.CountOfProduct) AND 
     (Max_Customer_Count.Customer = Product_count_query.Customer); 

Я хочу объединить эти три запроса в одном, чтобы получить результаты, как этот

Customer Name Products with max number 

Мой образец таблицы

Customer Product 
James Keyboard 
James Monitor 
James Keyboard 

Выходной таблица будет (если Джеймс купил 2 клавиатуры и 1 монитор)

Customer Product Countof продукт James Keyboard 2

Если в количестве купленных продуктов есть галстук, то как название продукта, так и количество продукта должны быть объединены с помощью разделителя запятой.

+2

Какой 'RDBMS' вы используете –

+0

Это неясно, что вы здесь. Если я правильно читаю ваш вопрос, вы можете получить то, что хотите, с помощью одного запроса, используя COUNT() и предложение GROUP BY. Вы показали образец таблицы; пожалуйста, [edit], чтобы включить вывод, который вы хотите получить из этой таблицы. Пока вы на нем, добавьте тег для конкретной СУБД, которую вы используете, поскольку синтаксис и функциональность могут различаться между ними, и поэтому они имеют отношение к ответам. –

+0

В моей выходной таблице должно быть имя клиента и соответствующее имя продукта с максимальным количеством. Например, Джеймс купил 2 клавиатуры и 1 монитор. Так что результат должен быть –

ответ

1

, к сожалению, Mysql не поддерживает ROW_NUMBER функцию окна так,

Попробуйте

SELECT Customer, 
     Group_concat(Product separator ','), 
     Group_concat(CountOfProduct separator ',') 
FROM (SELECT MaxTable.Customer, 
       MaxTable.Product, 
       Count(MaxTable.Product) AS CountOfProduct 
     FROM MaxTable 
     GROUP BY MaxTable.Customer, 
        MaxTable.Product) a 
WHERE CountOfProduct = (SELECT Max(CountOfProduct) 
         FROM (SELECT MaxTable.Customer, 
             MaxTable.Product, 
             Count(MaxTable.Product) AS CountOfProduct 
           FROM MaxTable 
           GROUP BY MaxTable.Customer, 
              MaxTable.Product) b 
         WHERE a.Customer = b.Customer) 
GROUP BY Customer 

использование GROUP_CONCAT конкатенировать результат, когда есть связь

+0

Star !! Благодарю кучи. еще одна помощь, если есть связь, скажем, один клиент купил 2 клавиатуры и 2 монитора, тогда я хочу увидеть клавиатуру + монитор. Как это получить? –

+0

@RoleeSatyam Этот запрос уже делает это. Когда есть связь между двумя продуктами для клиента, тогда он вернет оба продукта –

+0

. Да, но мне было интересно, могу ли я объединить оба результата в одном? –

Смежные вопросы