redshift查询以获得所需的输出

时间:2017-03-08 17:14:31

标签: mysql sql sql-server postgresql amazon-redshift

在红移中为餐馆提供的数据集

每个Dish_id都被分配到一个类别 因此,基于正在接受的不同订单 我需要找到一个提供的主菜,所有其他项目随之而来 主要项目(该餐厅的每个不同项目将作为主要菜肴一次)

目前,我可以为一个dish_id做这件事并获得贡献

Select category_name,count(category_name) from  ( 

Select order_id,dish_id,dish_name,category_id,category_name from abc
where order_id in (Select distinct order_id from abc where dish_name='Paneer_pizza' and restaurant_id=1) group by order_id,dish_id,dish_name,category_id,category_name order by category_name ) group by category_name

问题的

  

如何在外部查询中打印Panner_pizza以及category_name和count?

     

如何在内部查询中传递该餐厅中存在的所有dish_name   并获得所有菜肴的贡献以及所有类别的计数?

1 个答案:

答案 0 :(得分:0)

很难准确说出你想要的......你可能需要两个查询。但我认为像这样的内部查询可能会有所帮助。这会将结果过滤到您感兴趣的主菜和餐厅,并将主菜添加到订单中的每个记录中。

select a.order_id, primary_dish, dish_id, dish_name, category_id, category_name
from abc a
inner join (
    Select distinct order_id, dish_name as primary_dish
    from abc
    where dish_name='Paneer_pizza' and restaurant_id=1
) b on b.order_id = a.order_id
where primary_dish != dish_name --optionally exclude the primary dish record

因此,主要菜肴的其他菜肴类别的数量将是:

with dishes as (
    select a.order_id, primary_dish, dish_id, dish_name, category_id, category_name
    from abc a
    inner join (
        Select distinct order_id, dish_name as primary_dish
        from abc
        where dish_name='Paneer_pizza' and restaurant_id=1
    ) b on b.order_id = a.order_id
    where primary_dish != dish_name --optionally exclude the primary dish record
)
select primary_dish, category_name, count(*) from dishes
group by primary_dish, category_name

我认为这可能是你真正想要的。这使得餐厅的所有菜肴都将每道菜作为主菜,然后根据主要菜肴订购的菜肴,其类别以及包含次要菜肴的订单总数:

with dishes as (
    select a.order_id, primary_dish, dish_id, dish_name, category_id, category_name
    from abc a
    inner join (
        Select distinct order_id, dish_name as primary_dish
        from abc
        where restaurant_id=1
    ) b on b.order_id = a.order_id
    where primary_dish != dish_name --optionally exclude the primary dish record
)
select primary_dish, dish_name, category_name, count(*) from dishes
group by primary_dish, dish_name, category_name