mysql - SQL 计算表中的不同值,具有多种 Where 可能性
问题描述
问题很简单。如何将以下 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
所以这只是抛出错误而不是生产商品。我能够在顶部查询中找到答案,我能够在底部找到答案,但是我无法找到将两者结合起来的答案。
任何建议将不胜感激。
更新/编辑
我有以下...
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;