简体   繁体   English

MySQL查询对具有组值的行数进行计数

[英]Mysql query to count number of rows with value with a group

I have a list of stock ordered by a number of users. 我有一些用户订购的库存清单。 i need to know how many of the stock are labeled priority = 'Y' and 'N' 我需要知道有多少股票被标记为优先级='Y'和'N'

SELECT
glidemedia.glide_outlet.run,
glidemedia.glide_stock.title,
glidemedia.glide_stock.stockID,
glidemedia.glide_stock.titleID,
glidemedia.glide_schedule_entry.priorityItem,
count(glidemedia.glide_schedule_entry.stockID) as stockCount,
count(glidemedia.glide_schedule_entry.priorityItem = 'Y') as priorityItemYes,
count(glidemedia.glide_schedule_entry.priorityItem = 'N') as priorityItemNo
FROM
glidemedia.glide_outlet
INNER JOIN glidemedia.glide_schedule_entry ON glidemedia.glide_outlet.outletID = glidemedia.glide_schedule_entry.outletID
INNER JOIN glidemedia.glide_stock ON glidemedia.glide_schedule_entry.stockID = glidemedia.glide_stock.stockID
WHERE
glidemedia.glide_outlet.run = 109
GROUP BY
glidemedia.glide_schedule_entry.stockID

Change 更改

count(glidemedia.glide_schedule_entry.priorityItem = 'Y') as priorityItemYes,
count(glidemedia.glide_schedule_entry.priorityItem = 'N') as priorityItemNo

to

sum(glidemedia.glide_schedule_entry.priorityItem = 'Y') as priorityItemYes,
sum(glidemedia.glide_schedule_entry.priorityItem = 'N') as priorityItemNo

For ANSI standard its 对于ANSI标准

sum( 
 case when glidemedia.glide_schedule_entry.priorityItem = 'Y' then 1 else 0 end
) as priorityItemYes

UPDATE Why sum() instead of count() , the reason is you are not counting the number of rows rather you are counting the sum/number of times certain column value is appearing using some condition. 更新为什么使用sum()而不是count() ,原因是您没有在计算行数,而是在使用某种条件计算某些列值出现的总和/次数。

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

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