我有一张表,它有以下几个字段;
id (int)
line_id (int)
cell_no (int)
timestamp (datetime)
total (int)
passed (int)
data_type (varchar)
created_at (datetime)
updated_at (datetime)对于表,有多个包含相同值的cell_no的行。我希望查询该表,合并具有相同cell_no值的所有行,将每个不同cell_no的传递总数和总数之和,然后以升序返回按传递/总计排序的结果。
我可以让它在MySQL中正常工作,但我不能让它在MSSQL中工作,因为它抱怨某些字段在定义上不在组中,但是当我将它们放入组中时,cell_no相同的行不会合并。
下面是如何在MySQL中进行查询;
SELECT id, cell_no, data_type, sum(total) AS total, sum(passed) AS passed
FROM line_data AS ld
WHERE line_id = 1
AND timestamp >= '2018-07-29 00:00:00'
AND timestamp <= '2018-07-29 23:00:00'
GROUP BY cell_no
ORDER BY ((passed / total) * 100) ASC我将如何向MSSQL展示这一点?
发布于 2018-09-10 16:09:40
您的问题是查询无效SQL。每个cell_no存在多个id和data_type,并且您不告诉DBMS要选择哪一个。
MySQL静默地将select子句转换为
SELECT
ANY_VALUE(id),
cell_no,
ANY_VALUE(data_type),
SUM(total) AS total,
SUM(passed) AS passed函数ANY_VALUE(id)意味着您不关心要为结果选择哪一个单元格的ID。
ANY_VALUE在Server中不可用,但由于您显然不在乎哪个值,所以可以用MIN或MAX替换它
SELECT
MIN(id),
cell_no,
MIN(data_type),
SUM(total) AS total,
SUM(passed) AS passed更新:另一个问题可能是您的ORDER BY子句。7/2在MySQL中是3.5 (应该是预期的),但在Server中只有3,因为Server看到两个整数的除法,并且希望结果也是一个整数。您可以将一个或两个整数转换为十进制以获得小数结果:
ORDER BY (CAST(passed AS DECIMAL) / total) * 100 ASC发布于 2018-09-10 16:04:01
你有两个错误:
你有三个选择来修正它们。
id列
选择cell_no,SUM(总计)作为总计,SUM(传递)从line_data传递为ld,其中line_id =1,时间戳>= '2018-07-29 : 00:00:00‘和时间戳<= '2018-07-29 23:00:00’组按cell_no顺序(( SUM( passed ) / SUM(总计)* 100)id列添加到group by中:
选择id、cell_no、data_type、SUM(总计)作为总计,SUM( passed )从line_data传递为ld,其中line_id =1,时间戳>= '2018-07-29 00:00:00‘和时间戳<= '2018-07-29 23:00:00:00’组按id、cell_no、data_type ORDER (SUM(传递)/SUM(总计)* 100)id列(具有最大值、最小值或.)
选择MAX(id)、cell_no、data_type、SUM(总计)作为总计,SUM( passed )从line_data传递为ld,其中line_id =1,时间戳>= '2018-07-29 00:00:00‘和时间戳<= '2018-07-29 23:00:00’组按cell_no,data_type ORDER按(SUM(Passed)/SUM(总计)* 100)发布于 2018-09-10 15:57:27
没有聚合的Select语句中的所有字段都需要在Group中。
SELECT id, cell_no, data_type, sum(total) AS total, sum(passed) AS passed, (sum(passed)/sum(total)*100) as percent_passed FROM line_data AS ld WHERE line_id = 1 AND timestamp >= '2018-07-29 00:00:00' AND timestamp <= '2018-07-29 23:00:00' GROUP BY id, cell_no, data_type ORDER BY 6 ASC
编辑以包括select语句中传递的百分比,然后按6顺序按第6列排序。
https://stackoverflow.com/questions/52261476
复制相似问题