[英]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.