mysql使用group计算来自一个表的行,并使用第二个表来计算连接

时间:2017-12-29 14:53:30

标签: mysql database jointable

我需要一些指导。我在编码中发现了一个缺陷。

我有两张桌子:

表1: eventinfo

id
evid
eventtype
division
evtdate
tod

还有更多字段,但对此不重要

SQL查询:

SELECT evid, eventype, evtdate , tod 
FROM `eventinfo` 
WHERE evid =  105 


eventtype     division  evtdate tod
beginner        0   2018-02-17  AM
intermediate    1   2018-02-17  AM
intermediate    2   2018-02-17  AM
advanced        1   2018-02-17  AM
advanced        2   2018-02-17  AM
beginner        0   2018-02-18  AM
intermediate    1   2018-02-18  AM
intermediate    2   2018-02-18  AM
advanced        1   2018-02-18  AM
advanced        2   2018-02-18  AM

表2:条目

id
entid
firstname
lastname
eventcat
evtdate
division
tod

加上更多行,但对此并不重要。

SQL查询:

SELECT evid, eventcat, evtdate , tod , COUNT( * ) AS count 
FROM entries 
WHERE evtid= '105' and  evtstatus= 'pending' 
GROUP BY evtdate, tod , evntcat

eventcat        evtdate     tod count
Advanced        2018-02-17  AM  35
Intermediate    2018-02-17  AM  18
Beginner        2018-02-17  AM  4
Advanced        2018-02-18  AM  35
Intermediate    2018-02-18  AM  18

在我需要的页面上,我需要计算参加此课程/活动的条目,以查看有多少座位可用。 (这样我知道我是否需要"告诉别人他们不能进入"我需要分组,因为在编码的这一点上,除法并不重要。

好的,这是我的问题。上面的查询效果很好,除了我的缺陷之外还没有关于课程/活动的条目。我需要上面的代码来表明第二个约会初学者是0.(我知道我当前的查询不会显示)

eventcat        evtdate     tod count
Advanced        2018-02-17  AM  35
Intermediate    2018-02-17  AM  18
Beginner        2018-02-17  AM  4
Advanced        2018-02-18  AM  35
Intermediate    2018-02-18  AM  18
**Beginner        2018-02-18  AM  0** <-----

我已经尝试过一些人加入桌子,但没有运气。 (奇怪的结果和数据库说我需要SET SQL_BIG_SELECTS = 1)

任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:1)

使用255

LEFT JOIN

demo

答案 1 :(得分:0)

如果我理解正确,一种方法使用相关子查询:

public partial class MainWindow : Window
{
    private double currentZoomFactor = 1;

    public MainWindow()
    {
        InitializeComponent();
    }

    protected override void OnMouseWheel(MouseWheelEventArgs e)
    {
        base.OnMouseWheel(e);
        FrameworkElement content = Content as FrameworkElement;

        if (content != null)
        {
            if (e.Delta > 0)
            {
                currentZoomFactor += .1;
                content.LayoutTransform = new ScaleTransform(currentZoomFactor, currentZoomFactor);
            }
            else
            {
                currentZoomFactor -= .1;
                currentZoomFactor = Math.Max(.1, currentZoomFactor);
                content.LayoutTransform = new ScaleTransform(currentZoomFactor, currentZoomFactor);
            }
        }
    }
}