[英]SQL query for stacked bar chart
在我的项目中,我试图编写一个查询以获取堆积条形图的数据。 我没有解释数据库的架构(这很冗长),而是找到了一个类似的类比,以后可以移植到数据库。
在此页面上 ,运行查询
SELECT * FROM [Products]
在表格中,如果要选择如下所示的堆积条形图数据,该如何形成查询?
抱歉,我无法在此方面进行大量研究,因为我什至无法可视化SELECT子句的外观。 我试图检查是否可以在WHERE子句中使用AS,然后对其进行计数。 但这似乎不是正确的语法。
我将通过PowerBI在MS SQL Server上运行实际查询
第一步将为袋,瓶和罐子创建一个标志。 这可以在SQL或Power BI中完成。
对于SQL,请使用如下查询:
SELECT *
, CASE
WHEN Products.Unit LIKE '%bag%' THEN 'Bag'
WHEN Products.Unit LIKE '%bottle%' THEN 'Bottle'
WHEN Products.Unit LIKE '%jar%' THEN 'Jar'
ELSE 'Other'
END AS 'UnitFlag'
FROM dbo.Products
对于Power BI,使用DAX通过以下公式创建新列:
UnitFlag = IF(IFERROR(SEARCH("bag", Products[Unit]), -1) > 1, "Bag",
IF(IFERROR(SEARCH("Bottle", Products[Unit]), -1) > 1, "Bottle",
IF(IFERROR(SEARCH("Jar", Products[Unit]), -1) > 1, "Jar",
"Other"
)
)
)
然后只需配置您的堆叠图表,如下所示。
在这里,您可以更改一些设置,以使图形看起来更好一些; 例如,将X轴更改为“分类”而不是“连续”,并在不希望显示的情况下隐藏“其他”类别。
听起来您想了解聚合:
select categoryID,
reverse(left(reverse(unit), charindex(' ',reverse(unit))-1)) as Unit_type, -- gets the last word of `UNIT`
count(*) as Total_Products
from Products
group by categoryID,
reverse(left(reverse(unit), charindex(' ',reverse(unit))-1))
这将根据单位类型和类别ID对所有行和组进行计数。 试试看,看看会发生什么。
我建议您尽早了解聚合,它非常强大。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.