简体   繁体   English

MySQL - 我可以将同一个表上的许多查询合并为一个查询吗?

[英]MySQL - Can I combine many queries on the same table into 1 query?

我有很多疑问,可以将它组合成1来优化吗?

  1. SELECT COUNT(prod_id) FROM products WHERE inventory <= 5 AND cat_id = 1
  2. SELECT COUNT(prod_id) FROM products WHERE inventory BETWEEN 5 AND 10 AND cat_id = 1
  3. SELECT COUNT(prod_id) FROM products WHERE inventory > 10

I think this should work for you. 我认为这对你有用。 It will return the 3 counts in a single SQL statement: 它将在单个SQL语句中返回3个计数:

SELECT SUM(CASE WHEN inventory <= 5 AND cat_id = 1 THEN 1 ELSE 0 END) Q1Result,
   SUM(CASE WHEN inventory BETWEEN 5 AND 10 AND cat_id = 1 THEN 1 ELSE 0 END) Q2Result,
   SUM(CASE WHEN  inventory > 10 THEN 1 ELSE 0 END) Q3Result
FROM products 

And here is the SQL Fiddle . 这是SQL小提琴

Good luck. 祝好运。

SELECT COUNT(prod_id) FROM products WHERE inventory <= 5 AND cat_id = 1
UNION ALL
SELECT COUNT(prod_id) FROM products WHERE inventory BETWEEN 5 AND 10 AND cat_id = 1
UNION ALL
SELECT COUNT(prod_id) FROM products WHERE inventory > 10

You'll get back multiple rows from the queries all in one big long list. 您将从一个很长的列表中的查询中获取多行。

你可以使用:

select sum( x ) from query 1 union query 2  etc

Try this one 试试这个吧

DEMO DEMO

SELECT  (
    SELECT COUNT(prod_id) FROM products WHERE inventory <= 5 AND cat_id = 1
    ) AS count1,
    (
    SELECT COUNT(prod_id) FROM products WHERE inventory BETWEEN 5 AND 10 AND cat_id = 1
    ) AS count2,
    (
    SELECT COUNT(prod_id) FROM products WHERE inventory > 10
    ) AS count3

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

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