Как достать тройку лидеров из таблицы - PullRequest
0 голосов
/ 17 мая 2018

Я хочу, чтобы три самых продаваемых продукта были напечатаны в таблице Итак, я сделал таблицу, которая

select articel_id, article_count
from
(select articel_id, count( articel_id) as article_count
from sales_records_row
group by  articel_id
order by count(articel_id) DESC 
) as overview

Что дает

article_id      article_count
 1                30
 2                12
 4                8
 5                8
 8                8
 etc              etc

Но мне кажется, что я не могу звонить по моей новой "обзорной таблице", поскольку она не является частью исходной базы данных. Я хотел бы использовать article_id, чтобы найти название статьи, а затем получить таблицу со столбцами

article_name      article_count

Могу ли я даже использовать свой первый код или есть более подходящий способ для этого?

** EDIT Теперь я пришел с этим решением. В чем разница между этим и иметь JOIN?

select articles.name as 'Product Name', article_count
from
(select articel_id, count( articel_id) as article_count
from sales_records_row
group by  articel_id
order by count(articel_id) DESC limit 3
) as overview, articles
where articles.articel_id = overview.articel_id

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Если вы хотите ровно три продукта (независимо от связей), используйте limit:

select articel_id, count( articel_id) as article_count
from sales_records_row
group by  articel_id
order by count(articel_id) DESC 
limit 3;

Если вы хотите сохранить результаты в таблице, используйте либо:

create table <table name> as

или

create temporary table <table name> as

до select.Любой из них сохранит таблицу, чтобы вы могли запросить ее позже.Второй создает временную таблицу, которая исчезнет после завершения сеанса.

0 голосов
/ 18 мая 2018
SELECT articel_id, article_count, row_num
FROM(
   SELECT articel_id, count(articel_id) as article_count, @r:=@r+1 row_num
   FROM sales_records_row, (SELECT @r:=0) t
   GROUP BY articel_id ORDER BY article_count DESC
) a WHERE a.row_num BETWEEN 1 AND 3;

Пожалуйста, попробуйте это

0 голосов
/ 17 мая 2018

У JOINS:

select o.articel_id, t.article_name, o.article_count  
from table t
inner join (select articel_id, count(articel_id) as article_count
            from sales_records_row
            group by  articel_id
            order by count(articel_id) DESC
            LIMIT 3) o on o.articel_id = t.articel_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...