[英]Difference between these two mysql queries
我想知道这两个查询之间的区别:第一个查询是给我所有记录,一切都很好。
Select * from table1 where tender_id='$tender_id' group by supplier_name
但是在下面的查询中,我添加了一个sum(case),但没有得到所需的输出。 第一个查询显示所有记录,但是第二个查询不显示所有记录。 我犯什么错误?
select cs.*, tender_id,
SUM(CASE WHEN ifmain = 'Yes' THEN total_inr ELSE 0 END) AS maintotal,
SUM(CASE WHEN ifmain = 'No' THEN total_inr ELSE 0 END) AS subtotal
from table1 cs
where cs.tender_id='$tender_id'
group by cs.supplier_name
我想知道第二个查询是否可以显示所有带有条件(tender_id)的记录? 还是迭代更多?
在标准SQL中,包含GROUP BY子句的查询不能引用选择列表中未在GROUP BY子句中命名的未聚合列。 参见(例如) https://dev.mysql.com/doc/refman/5.0/en/group-by-handling.html
使用GROUP BY子句时,MySQL有一个不幸的(我认为是错误的)默认行为。 此查询在大多数SQL数据库中无效:
Select * from table1 where tender_id='$tender_id' group by supplier_name
如果启用了ONLY_FULL_GROUP_BY SQL模式,则在MySQL中将无效。
我强烈建议您将使用GROUP BY的所有查询视为该子句中的所有非聚合列。 例如
select
cs.supplier_name
, SUM(CASE WHEN ifmain = 'Yes' THEN total_inr ELSE 0 END) AS maintotal
, SUM(CASE WHEN ifmain = 'No' THEN total_inr ELSE 0 END) AS subtotal
from table1 cs
where cs.tender_id='$tender_id'
group by
cs.supplier_name
如果您需要额外的列,则例如
select
cs.supplier_name
, tender_id
, SUM(CASE WHEN ifmain = 'Yes' THEN total_inr ELSE 0 END) AS maintotal
, SUM(CASE WHEN ifmain = 'No' THEN total_inr ELSE 0 END) AS subtotal
from table1 cs
where cs.tender_id='$tender_id'
group by
cs.supplier_name
, tender_id
等等。 当然,随着您在group by子句中包含更多列,您可能会增加产生的行数,但这就是GROUP BY的工作方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.