mysql - SQL 计算具有多个Where 可能性的表中的不同值

标签 mysql sql

问题很简单。如何将以下 2 个 sql 查询合并为一个。

我在 MYSQL Workbase UI 上使用 MYSQL v8.0.16。

SELECT Node_Type, COUNT(*)  AS `count`
FROM node_table_vis 
WHERE Node_SpinePlanID = "1"
GROUP BY Node_Type;

返回

TYPE - COUNT
-----------
AGN     18
TJ      26
DSLAM   15
PON     18
CCJ     17

SELECT DISTINCT Node_SpinePlanID
FROM node_table_vis
WHERE Node_Exchange = "Exchange 1";

这就是返回

SpinePlanID
------------
1
5
10

所以本质上我想要的是像这样的查询?

SELECT Node_Type, COUNT(*)  AS `count`
FROM node_table_vis 
WHERE Node_SpinePlanID =
(
    SELECT DISTINCT Node_SpinePlanID
    FROM node_table_vis
    WHERE Node_Exchange = "Exchange 1";
)
GROUP BY Node_Type;

所以我得到的表格看起来像

TYPE -  1  -  5  -  10
-----------------------
AGN     18    x     y
TJ      26    x     y
DSLAM   15    x     y
PON     18    x     y
CCJ     17    x     y

所以这只是抛出错误而不是生产 cargo 。我能够找到顶部查询的答案,我能够找到底部查询的答案,但是我无法找到将两者结合起来的答案。

如有任何建议,我们将不胜感激。

更新/编辑

我有以下内容...

SET @@group_concat_max_len = 10000;
SET @sql = null;
SELECT group_concat(distinct
    concat(
        'SUM(Node_SpinePlanID = ''',
        Node_SpinePlanID,
        ''',) AS ',
        Node_SpinePlanID
    )
) INTO @sql 
FROM node_table_vis;

SET @sql = CONCAT('SELECT Node_Type, ', @sql, ' FROM node_table_vis GROUP BY Node_Type');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

但是 PREPARE stmt 不起作用?收到错误代码 1064 您有 SQL 错误语法吗?

对此有什么建议吗?

最佳答案

您在寻找条件聚合吗?

SELECT Node_Type,
       SUM(Node_SpinePlanID = 1) AS count_1,
       SUM(Node_SpinePlanID = 5) AS count_5,
       SUM(Node_SpinePlanID = 10) AS count_10
FROM node_table_vis 
GROUP BY Node_Type;

您还可以将值放入行中:

SELECT Node_Type, Node_SpinePlanID, COUNT(*) as cnt
FROM node_table_vis 
GROUP BY Node_Type, Node_SpinePlanID;

如果没有动态 SQL,您能做的最好的可能是将这些值放在一行中,即将它们放在具有两个聚合级别的字符串中:

SELECT Node_Type, GROUP_CONCAT(Node_SpinePlanID, ':', cnt SEPARATOR ',')
FROM (SELECT Node_Type, Node_SpinePlanID, COUNT(*) as cnt
      FROM node_table_vis 
      GROUP BY Node_Type, Node_SpinePlanID
     ) ts
GROUP BY Node_Type;

关于mysql - SQL 计算具有多个Where 可能性的表中的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58249398/

相关文章:

php - session 变量未发送到下一页

mysql - 从一个表中选择所有并从另一个表中加入最近的关联

sql - 循环遍历临时表的所有行并为每一行调用一个存储过程

sql - SQL弱关联表字段映射

php - 好主意/坏主意?在一小组子查询结果之外使用 MySQL RAND()?

mysql按不排序排序

mysql - 从 LEFT OUTER JOIN 计算 NULL 值,这可能吗?

c# - 使用 SQL Server 存储数据

sql - 在 knex 中创建外部关系时出错 - 表创建竞争条件

php - prestashop 数据库表填满时导入缓慢