SQL。按年龄范围划分的统计用户表
我有一个表,上面有我的平台用户的出生日期,我需要为后台统计项目按18-25岁、25-35岁等年龄段对他们进行排序。它们已经按性别分类了 这是我的密码:SQL。按年龄范围划分的统计用户表,sql,Sql,我有一个表,上面有我的平台用户的出生日期,我需要为后台统计项目按18-25岁、25-35岁等年龄段对他们进行排序。它们已经按性别分类了 这是我的密码: public function GenreByAge() { $date_day = new datetime(); $date_day = $date_day->format('Y-m-d'); $sql = "SELECT count(*) as nb, id_thematiqu
public function GenreByAge() {
$date_day = new datetime();
$date_day = $date_day->format('Y-m-d');
$sql = "SELECT count(*) as nb, id_thematique, dn
FROM qr_thematique_preco q
INNER JOIN users as u ON u.id_user = q.id_membre
WHERE u.id_part = '$this->id_part'
AND u.sexe = '$this->genre'";
switch ($this->tranche_age) {
case 1:
$sql .= AND DATE_FORMAT(dn,'%Y-%m-%d') <= date_sub(curdate(), INTERVAL 18 YEAR)
AND DATE_FORMAT(dn,'%Y-%m-%d') > date_sub(curdate(), INTERVAL 26 YEAR);
break;
case 2:
$sql .= AND dn <= date_sub(curdate(), INTERVAL 26 YEAR)
AND dn > date_sub(curdate(), INTERVAL 36 YEAR);
break;
case 3:
$sql .= AND dn <= date_sub(curdate(), INTERVAL 36 YEAR)
AND dn > date_sub(curdate(), INTERVAL 46 YEAR);
break;
case 4:
$sql .= AND dn <= date_sub(curdate(), INTERVAL 46 YEAR)
AND dn > date_sub(curdate(), INTERVAL 56 YEAR);
break;
case 5:
$sql .= AND dn <= date_sub(curdate(), INTERVAL 56 YEAR)
AND dn > date_sub(curdate(), INTERVAL 66 YEAR);
break;
但是查询不会返回任何与我的数据有关的内容
谢谢你的帮助。你把WHERE条件写错了,它们是相互排斥的
例如,出生日期在过去不能同时少于18年和超过26年
AND DATE_FORMAT(dn,'%Y-%m-%d') <= date_sub(curdate(), INTERVAL 18 YEAR)
AND DATE_FORMAT(dn,'%Y-%m-%d') > date_sub(curdate(), INTERVAL 26 YEAR);
或者,您可以将现有条件中的规则切换为:
AND DATE_FORMAT(dn,'%Y-%m-%d') >= date_sub(curdate(), INTERVAL 18 YEAR)
AND DATE_FORMAT(dn,'%Y-%m-%d') < date_sub(curdate(), INTERVAL 26 YEAR);
它起作用了。非常感谢你。我要为这样一个明显的错误永远责备自己!!“我想我会慢慢喝咖啡的。”马泰乌斯说,“好吧,这只是一个小小的变化。请不要忘记奖励。@mateus或可能增加咖啡因:@mateus如果这个答案有助于您解决问题,请不要忘记将问题升级/标记为正确。您使用的是哪种数据库管理系统?
AND DATE_FORMAT(dn,'%Y-%m-%d') >= date_sub(curdate(), INTERVAL 18 YEAR)
AND DATE_FORMAT(dn,'%Y-%m-%d') < date_sub(curdate(), INTERVAL 26 YEAR);