具有多个计数和分组的MySql过程

时间:2018-04-23 18:44:35

标签: mysql sql database stored-procedures

我一直在为慈善机构创建一个应用程序,允许家庭在假期期间注册接收礼物。 db组织有多个表。下面列出了这些表(及其架构/创建语句):

CREATE TABLE IF NOT EXISTS ValidDates(
  chosenYear YEAR PRIMARY KEY, 
  startDate DATE NOT NULL,
  endDate DATE NOT NULL,
  maxReservationsPerDay INTEGER default 50, 
  CONSTRAINT chkDates CHECK(startDate < endDate)
) ENGINE=INNODB;

CREATE TABLE IF NOT EXISTS Families(
  fID INTEGER PRIMARY KEY AUTO_INCREMENT,
  signature BLOB DEFAULT NULL,
  reservationDate DATE NOT NULL,
  signatureTS TIMESTAMP,
  createdTS TIMESTAMP NOT NULL,
  createdBy INTEGER,
  FOREIGN KEY (createdBy) REFERENCES Employees(eID) ON DELETE CASCADE
) ENGINE=INNODB;

CREATE TABLE IF NOT EXISTS FamilyMembers(
  fmID INTEGER PRIMARY KEY AUTO_INCREMENT,
  fName VARCHAR(255) NOT NULL,
  lName VARCHAR(255) NOT NULL,
  age INTEGER NOT NULL,
  sex BIT(1) NOT NULL, 
  ssNum VARCHAR(9) UNIQUE NOT NULL,
  recievedBig BIT(1) DEFAULT 0,
  recievedNormal BIT(1) DEFAULT 0,
  recievedStocking BIT(1) DEFAULT 0,
  famID INTEGER,
  INDEX fIndex (famID), 
  FOREIGN KEY (famID) REFERENCES Families(fID)  ON DELETE CASCADE 
) ENGINE=INNODB;

我想写一个一个查询(存储过程)来完成每个日期,选择日期,在该日期投放的家庭数量以及家庭成员总数在那个日期送达。例如,它应该返回2018年12月12日,总共有5个家庭有预订,在这些家庭中,他们共有13个家庭成员(id为1的家庭有5个成员,id为2的家庭有1个成员, family id 3有1名成员,id 4有4名成员,而5名家庭有2名成员。它应该在所有日期都这样做。谢谢你的帮助。

注意:这些值将被放入Dictionary&lt; DateTime,元组&lt; int,int&gt;&gt;在c#中(其中键是日期,第一个int是族的数量,第二个int是这些族中的成员数)并用于报告功能。

1 个答案:

答案 0 :(得分:0)

这将返回预期结果(不使用ValidDates表):

select reservationDate
  ,count(distinct fmID) as #_of_families
  ,count(*) as #_of_familiy_members
from Families as f
join FamilyMembers as fm
  on f.fID = fm.famID
group by reservationDate