SQL检索子查询中的过滤值

时间:2016-03-09 23:45:30

标签: mysql sql count group-by having

此cust_id是外键, ords 返回每个客户的订单数

SELECT cust_name, (
    SELECT COUNT(*)
    FROM Orders
    WHERE Orders.cust_id = Customers.cust_id
) AS ords
FROM Customers

输出是正确的,但我想过滤它以仅检索订单数量少于订单的客户,我不知道如何过滤子查询 ords ,我试过{{ 1}}在代码的末尾,但它不起作用,我尝试在cust_id比较后添加WHERE ords < 2,但它不起作用。我正在使用MySQL

2 个答案:

答案 0 :(得分:0)

使用HAVING子句(并使用连接而不是子查询).....

<ListView x:Name="List" ItemsSource="{Binding}" SelectionChanged="List_SelectionChanged">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid Margin="11" Width="460">
                <StackPanel Orientation="Vertical" >
                    <Image Width="100" Height="100"
                       Source="{Binding Way}"/>
                </StackPanel>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

如果您想要包含零订单的人,请将联接更改为外部联接。

答案 1 :(得分:0)

此处不需要相关子查询,因为它计算每行的值,但不会产生“良好”的性能。更好的方法是使用带有join,group by和having子句的常规查询将条件应用于组。

由于您的条件是仅返回少于2个订单的客户,因此left join而不是inner join是合适的。它会返回没有订单的客户(计数为0)。

select
  cust_name, count(*)
from
  customers c
  left join orders o on c.cust_id = o.cust_id
group by cust_name
having count(*) < 2