mysql子选择新手

mysql子选择新手,mysql,select,subquery,Mysql,Select,Subquery,我得到的答案是 SELECT a.lead_id, c.state_name AS COL1DATA, count( c.state_name ) AS leadcount, ( SELECT count( won_loss ) AS wonlosscount FROM lead_status WHERE (won_loss = 'loss') AND lead_id = a.lead_id ) AS losscount FROM lead AS a JOIN states AS c ON a

我得到的答案是

SELECT a.lead_id, c.state_name AS COL1DATA, count( c.state_name ) AS leadcount, (

SELECT count( won_loss ) AS wonlosscount
FROM lead_status
WHERE (won_loss = 'loss')
AND lead_id = a.lead_id
) AS losscount
FROM lead AS a
JOIN states AS c ON a.state_id = c.states_id
GROUP BY c.state_name
ORDER BY losscount DESC
但损失计数应为1和1


任何帮助都会被告知

我猜在按状态名称分组的同时,在相关查询中混合非聚合lead\u id会出现问题。也许你可以描述一下你想要得到什么

编辑:基于下面评论中的OP反馈

编辑2:更改为基于聊天会话的左侧外部联接。并非所有潜在客户都具有潜在客户状态

lead_id     won_loss    won_price   won_mainreason  loss_mainreason     loss_attachment_id  lost_dont_sell_note     add_note    dealer_satisfaction
      5     win         4655        pricing                                                                         fghfg       somewhat
      8     won         34543       pricing                                                                         sfdgs       satisfied
      7     loss                                    service                                                         Additional Notes    verygood
      9     loss                                    not_in_stock                                                    Additi      satisfied
我可能会说这个版本稍微好一点。但我不想完全改变你的疑问。(我确实更改了别名,因为A和C混淆了。)


输出中包含的lead_id列不可预测,除非该组只有一行。根据你所说的,我怀疑你是否真的想要它。

你能发布
lead\u status
的内容吗?没问题。,。。我想要得到的是每个州的总潜在客户数和每个州丢失的潜在客户数见John woo给出的ansewr…他似乎正在达到目标,但还没有达到目标…shawn:总潜在客户数显示为赢得/失去的总数量。。。。例如,我可以有10个领先优势,其中只有2个获胜或3个失败,所以领先优势计数应该是10个失败计数应该是3。显然,在没有看到一些数据的情况下,我们无法猜测最终的数字。
count(l.lead\u id)
表达式将计算每组的行数,而不考虑赢得的损失值。shawn它现在不这样做…如果我的总损失数=2(假设状态1损失=1,状态2损失=1),则总潜在客户数显示为(leadcount)=2@NMFSDF我不确定我是否遵循了这一点,但听起来要么没有足够的数据来描述整个画面,要么你可能误解了数字。您给出的一些评论的描述非常简单。你可能遗漏了一个小细节吗?如果你公布所有表格数据,我可以很快给你答案。
lead_id     won_loss    won_price   won_mainreason  loss_mainreason     loss_attachment_id  lost_dont_sell_note     add_note    dealer_satisfaction
      5     win         4655        pricing                                                                         fghfg       somewhat
      8     won         34543       pricing                                                                         sfdgs       satisfied
      7     loss                                    service                                                         Additional Notes    verygood
      9     loss                                    not_in_stock                                                    Additi      satisfied
SELECT
    s.state_name AS COL1DATA, count(c.state_name) AS leadcount,
    sum(case when ls.won_loss = 'loss' then 1 else 0 end) as losscount
FROM
    lead AS l
    INNER JOIN states AS s ON s.state_id = l.states_id
    LEFT OUTER JOIN lead_status as ls on ls.lead_id = l.lead_id
GROUP BY s.state_name
ORDER BY losscount DESC
SELECT
    min(s.state_name) AS COL1DATA,
    count(l.lead_id) AS leadcount, /* counting non-nullable key on the outer side */
    sum(case when ls.won_loss = 'loss' then 1 else 0 end) as losscount
FROM
    lead AS l
    INNER JOIN states AS s ON s.state_id = l.states_id
    LEFT OUTER JOIN lead_status as ls on ls.lead_id = l.lead_id
GROUP BY s.state_id /* might be better to group on the id */
ORDER BY losscount DESC