繁体   English   中英

如何组合 2 个相同的 SQL 查询

[英]How to combine 2 same SQL queries

您能帮我组合来自同一个表的 2 个类似的 select sql 查询,如下所示:

查询 #1

SELECT COUNT(name) 
FROM orders 
WHERE name = '$product_name' 
  AND order_status LIKE '%returned%'

查询 #2:

SELECT COUNT(name) 
FROM orders 
WHERE name = '$name_ru' 
  AND order_status LIKE '%returned%'

我试图用“OR”运算符将“name='$product_name'”和“name='$name_ru'”分开,但这向我展示了两个结果,我什至尝试了 UNION ALL 但没有运气,有人可以告诉我完成我的任务的正确方法?

如果在 excel 中,您可以显示所需的 output,那么很容易回答。 根据我的理解,您希望结果并排。 请根据您的表更改表名和列名。

    SELECT SUM(ISNULL(Counter1,0)) Counter1,SUM(ISNULL(Counter2,0)) Counter2 from 
(
SELECT CASE WHEN [NAME] LIKE '%a%' THEN COUNT(1) END Counter1,
CASE WHEN [NAME] LIKE '%af%' THEN COUNT(1) END Counter2 
from EMP
GROUP BY Name
)A
$sql="SELECT
  COUNT(name) filter (WHERE name = '$product_name' AND order_status LIKE '%returned%') AS nb1,
  COUNT(name) filter (WHERE name = '$name_ru' AND order_status LIKE '%returned%') AS nb2
  FROM orders";

在 postgresql 上工作

和“不太优雅”,但可以在 postgresl、mysql、...

SELECT nb1,nb2 FROM 
  ( SELECT 1 AS id,COUNT(name) AS nb1
FROM orders 
WHERE name = '$product_name' AND order_status LIKE '%returned%'
) r1
  JOIN
  ( SELECT 1 AS id,COUNT(name) AS nb2
FROM orders 
WHERE name = '$name_ru' AND order_status LIKE '%returned%'
) r2 USING (id);

这个也可以工作(在 postgresql 上可以,要在 mysql 上测试)

SELECT nb1,nb2 FROM 
  ( SELECT COUNT(name) AS nb1
FROM orders 
WHERE name = '$product_name' AND order_status LIKE '%returned%'
) r1
  JOIN
  ( SELECT COUNT(name) AS nb2
FROM orders 
WHERE name = '$name_ru' AND order_status LIKE '%returned%'
) r2 ON true;

尝试这个。

SELECT COUNT(CASE WHEN name = '$product_name' and order_status LIKE '%returned%' then 1 else NULL end),
       COUNT(CASE WHEN name = '$name_ru' AND order_status LIKE '%returned%' then 1 else null end)
FROM orders o

其他人的类似方法,但它们都与整个订单表背道而驰。 通过执行 count(case) AND 应用 where 子句,您可以限制要测试的数据量并简化 case 子句。

SELECT 
      SUM(CASE WHEN name = '$product_name' then 1 else 0 end ) Name1Count,
      SUM(CASE WHEN name = '$name_ru' then 1 else 0 end) Name2Count
   FROM 
      orders o
   where
          -- only consider those with a "%returned%" qualifier
          order_status LIKE '%returned%' 
      -- AND also the two name values you are looking for
      AND name in ('$product_name', '$name_ru' )

谢谢大家的回答,但正如我所见,没有一种简单而优雅的方式来组合这两个查询,所以我决定将它们分开,然后像下面这样一个接一个地获取,它完成了这项工作,但不是很漂亮我期望的方式:

$query_returned = "SELECT COUNT(name) FROM orders WHERE name='$product_name' AND order_status LIKE '%returned%'";
$data_returned = mysqli_query($conn,$query_returned) 或 die("错误:".mysqli_error($conn)); $show_data_returned = mysqli_fetch_array($data_returned);

                $data_returned_cnt = $show_data_returned['COUNT(name)'];
      
                $query_returned_ru = "SELECT COUNT(name) FROM orders WHERE name='$name_ru' AND order_status LIKE '%returned%'";  
                $data_returned_ru = mysqli_query($conn,$query_returned_ru) or die("Error : ".mysqli_error($conn));
                $show_data_returned_ru = mysqli_fetch_array($data_returned_ru);
                
                $data_returned_cnt_ru = $show_data_returned_ru['COUNT(name)'];

回声($data_returned_cnt + $data_returned_cnt_ru);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM