繁体   English   中英

php-Mysql写一个按查询分组

[英]php-Mysql Write a Group By query issue

我有一个名为comparitive_st_sup的表。 结构如下:

╔════╦═══════════╦═══════════╦════════╦═══════╗
║ id ║ tender_id ║ item_name ║ ifmain ║ total ║
╠════╬═══════════╬═══════════╬════════╬═══════╣
║  1 ║    400    ║  Item 1   ║  Yes   ║ 2000  ║
║  2 ║    400    ║  Item 2   ║  Yes   ║ 2500  ║
║  3 ║    400    ║  Item 3   ║  No    ║ 2000  ║
║  4 ║    400    ║  Item 4   ║  No    ║ 2900  ║
║  5 ║    400    ║  Item 5   ║  Yes   ║ 3100  ║
║  6 ║    402    ║  Item 9   ║  Yes   ║ 877   ║
║  7 ║    402    ║  Item 7   ║  No    ║ 9888  ║
╚════╩═══════════╩═══════════╩════════╩═══════╝

现在,我需要按bid_id和ifmain分组并显示总数。 例如:

 400  Yes  7600 (2000 + 2500 + 3100 that is ifmain=Yes)
 400  No   4900 (2000 + 2900 that is ifmain=No)

我尝试了以下查询。 但它不起作用:

SELECT 
 SUM(total) AS maintotal,
 SUM(total) AS subtotal, fmain 
FROM comparitive_st_sup 
WHERE tender_id='$tender_id' 
GROUP BY ifmain 

两步GROUP BY怎么样?

SELECT tender_id, ifmain, SUM(total)
FROM comparative_st_sup
WHERE tender_id='$tender_id'            # replace with any WHERE condition you want
GROUP BY tender_id, ifmain

我保留了出现在原始查询中的WHERE子句。 如果将WHERE条件更改为一个范围,或将结果集包含多个唯一的tender_id任何内容tender_id ,那么我的GROUP BY tender_id上用场。

单击下面的链接以获取查询的演示:

SQLFiddle

更新:

如果要在结果集中将“ Yes和“ No总和视为单独的列,可以尝试以下方式进行查询:

SELECT tender_id,
    SUM(CASE WHEN ifmain = 'Yes' THEN total ELSE 0 END) AS maintotal,
    SUM(CASE WHEN ifmain = 'No' THEN total ELSE 0 END) AS subtotal,
FROM comparative_st_sup
WHERE tender_id='$tender_id'
GROUP BY tender_id

同样,您可以更改WHERE子句以适合您的需求,或者将其完全删除。

使用以下两个字段进行分组:

Select sum(total) as maintotal, sum(total) as subtotal, fmain 
from comparitive_st_sup 
where tender_id='$tender_id' 
group by ifmain, ifmain 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM