【问题标题】:Two queries in one nested sql query一个嵌套 sql 查询中的两个查询
【发布时间】:2012-02-02 11:30:58
【问题描述】:

我想把两条sql语句合二为一。 第一个显示每天下达的总订单,第二个仅显示每天有员工作为操作文本的订单数。

select date(dated) date_ord, count(*) as orders_placed
from stats.sales_actions 
group by date_ord 
order by dated desc

select date(dated) date_order, count(*) as orders_modified
from stats.sales_actions 
where action_text LIKE '%STAFF%'
group by date_ord 
order by dated desc

如果可能,我想在一个表/sql 查询中显示。

【问题讨论】:

  • 欢迎使用 StackOverflow:如果您发布代码、XML 或数据示例,在文本编辑器中突出显示这些行并单击“代码示例”按钮 ({ } ) 在编辑器工具栏上很好地格式化和语法突出显示它!

标签: mysql group-by


【解决方案1】:

只需使用UNION:

select date(dated) date_ord, count(*), 'orders_places' as orders_placed
from stats.sales_actions 
group by date_ord 
order by dated desc
UNION
select date(dated) date_order, count(*), 'orders_modified' as orders_modified
from stats.sales_actions 
where action_text LIKE '%STAFF%'
group by date_ord 
order by dated desc

【讨论】:

  • 联合的一个问题是他们不知道哪个项目是orders_placed 或orders_modified,因为它具有相同的列名。你必须包括一些东西来区分它们。
  • @bluefeet 你可以像我现在所说的那样添加另一列。
  • 简单有效的解决方案
  • @rachel,如果你不需要,就不要放。
【解决方案2】:

您可以使用 UNION 来实现这一点 - 然后您可以使用 AS 关键字为计数列命名,以将它们彼此区分开来。例如:

select date(dated) date_ord, count(*) AS placed, 'orders_places' as orders_placed
from stats.sales_actions 
group by date_ord 
order by dated desc
UNION
select date(dated) date_order, count(*) AS modified, orders_modified' as orders_modified
from stats.sales_actions 
where action_text LIKE '%STAFF%'
group by date_ord 
order by dated desc

【讨论】:

  • 当然,这实际上是对您的两个查询的一个非常简单的更改。我只是复制并粘贴了您的查询,将 UNION (在这种情况下基本上将两个查询合并到一个结果表中)将它们两个分组,然后命名您的 count(*) 列,因为如果我没有他们将共享相同的名称。您可以使用 AS 关键字 - [column_to_select] AS name 执行此操作 - 这将在结果中为名为“column_to_select”的列提供名称“name”。
【解决方案3】:
select   date_ord, sum( orders_placed) as orders_placed ,   
          sum( orders_modified) as orders_modified
   from( 

            select date(dated) date_ord, count(*) as orders_placed , 0 as orders_modified
            from stats.sales_actions 
            group by date_ord 
            order by dated desc

           UNION

            select date(dated) date_ord, 0 as orders_placed, count(*)  as orders_modified
            from stats.sales_actions 
            where action_text LIKE '%STAFF%'
            group by date_ord 
            order by dated desc
        ) temp
          group by date_ord 
          order by dated desc

【讨论】:

    【解决方案4】:
    select date(dated) date_ord, 
    count(*) as orders_placed, 
    SUM (
            CASE 
               WHEN action_text LIKE '%STAFF%' 
               THEN 1 ELSE 0 END) AS ORDERS_STAFF 
    from stats.sales_actions 
    group by date_ord 
    order by dated desc
    

    这会在一行中显示两个值。如果您喜欢 2 行,只需在查询之间使用 union。

    【讨论】:

    • 如果您发布代码、XML 或数据示例,在文本编辑器中突出显示这些行,然后单击编辑器上的“代码示例”按钮 ({ })工具栏以很好地格式化和语法突出显示它!
    • 谢谢!我正朝着 100 rep 的方向前进 ;-)!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多