C# sql查询中的多选择命令
我想在我的sql中检索此类表:C# sql查询中的多选择命令,c#,.net,mysql,sql,C#,.net,Mysql,Sql,我想在我的sql中检索此类表: Type Qad (type count) Correct(No. of item without error) Accuracy(%) type 1 3 3 100 type2 6 3
Type Qad (type count) Correct(No. of item without error) Accuracy(%)
type 1 3 3 100
type2 6 3 50
我正在尝试使用此查询,但它有一个错误:
SELECT `type` AS 'ReturnType', COUNT(*) AS 'QAd',
(SELECT COUNT(*) FROM bartran WHERE QASample='2' AND QAErrorID='1' AND `type`=ReturnType AND TimefileDate BETWEEN '2012-01-01' AND '2012-12-31' AS 'Correct',
(SELECT COUNT(*) FROM bartran WHERE QASample='2' AND QAErrorID='1' AND `type`=ReturnType AND TimefileDate BETWEEN '2012-01-01' AND '2012-12-31') / COUNT(*) * 100) AS 'Accuracy'
FROM bartran WHERE QASample='2'
AND TimefileDate BETWEEN '2012-01-01' AND '2012-12-31'
GROUP BY TYPE;
我现在是新来的,希望有人能帮我。谢谢 查询中缺少括号),正确答案是:
SELECT `type` AS 'ReturnType',
Count(*) AS 'QAd',
(SELECT Count(*)
FROM bartran
WHERE qasample = '2'
AND qaerrorid = '1'
AND `type` = returntype
AND timefiledate BETWEEN '2012-01-01' AND '2012-12-31') AS
'Correct',
(SELECT Count(*)
FROM bartran
WHERE qasample = '2'
AND qaerrorid = '1'
AND `type` = returntype
AND timefiledate BETWEEN '2012-01-01' AND '2012-12-31') / Count(*
) * 100 AS 'Accuracy'
FROM bartran
WHERE qasample = '2'
AND timefiledate BETWEEN '2012-01-01' AND '2012-12-31'
GROUP BY type;
更好的查询是:
SELECT `type` AS 'ReturnType',
Count(*) AS 'QAd',
Count(CASE
WHEN qaerrorid = '1' THEN 1
ELSE NULL
end) AS 'Correct',
Count(CASE
WHEN qaerrorid = '1' THEN 1
ELSE NULL
end) / Count(*) * 100 AS 'Accuracy'
FROM bartran
WHERE qasample = '2'
AND timefiledate BETWEEN '2012-01-01' AND '2012-12-31'
GROUP BY type;
查询中缺少括号),正确答案是:
SELECT `type` AS 'ReturnType',
Count(*) AS 'QAd',
(SELECT Count(*)
FROM bartran
WHERE qasample = '2'
AND qaerrorid = '1'
AND `type` = returntype
AND timefiledate BETWEEN '2012-01-01' AND '2012-12-31') AS
'Correct',
(SELECT Count(*)
FROM bartran
WHERE qasample = '2'
AND qaerrorid = '1'
AND `type` = returntype
AND timefiledate BETWEEN '2012-01-01' AND '2012-12-31') / Count(*
) * 100 AS 'Accuracy'
FROM bartran
WHERE qasample = '2'
AND timefiledate BETWEEN '2012-01-01' AND '2012-12-31'
GROUP BY type;
更好的查询是:
SELECT `type` AS 'ReturnType',
Count(*) AS 'QAd',
Count(CASE
WHEN qaerrorid = '1' THEN 1
ELSE NULL
end) AS 'Correct',
Count(CASE
WHEN qaerrorid = '1' THEN 1
ELSE NULL
end) / Count(*) * 100 AS 'Accuracy'
FROM bartran
WHERE qasample = '2'
AND timefiledate BETWEEN '2012-01-01' AND '2012-12-31'
GROUP BY type;
声明返回的错误。从bartran中选择Type、Qad、Correct、accurity,其中QASample='2',以及其他您希望数据类似于分组类型的内容;声明返回的错误。从bartran中选择Type、Qad、Correct、accurity,其中QASample='2',以及其他您希望数据类似于分组类型的内容;我认为这解决了我的问题,但为什么执行要花很多时间呢?1分钟以上:(@JRC尝试我的新查询added@Ankur最好使用SUM而不是Count
SUM(当QARRORID='1'然后1 ELSE 0结束时的情况)
。也可以使用Count(1)
,而不是Count(*)
。这会有点麻烦faster@AndreyVoloshin计数(1)和计数(*)都是一样的,请看,我也没有发现sum是否优于count,所以我更喜欢count,因为代码清晰。我认为这现在解决了我的问题,但为什么执行会花费很多时间?1分钟多一点。:(@JRC尝试我的新查询added@Ankur使用SUM代替CountSUM是一个很好的方法(当QARRORID='1'然后1 ELSE 0结束时的情况)
。也使用COUNT(1)
,而不是COUNT(*)
。这将是一个小错误faster@AndreyVoloshin计数(1)和计数(*)都是一样的,请看,而且我也没有发现sum是否比count好,所以从代码清晰的角度来看,我更喜欢count