채택완료

DB count 특정 값을 갖는 항목 갯수 합 구하기 질문드립니다.

2023-01-30 (월) 10:17:52 2,563

안녕하세요.

고수님들께 질의를 드리고 배움을 얻고자 질의드립니다.

질의 : 특정 항목을 컬럼 값으로 갖고 있는 DB 항목의 합을 구하고 싶습니다.

         php 내에서 사용 예정입니다. DB는 아래와 같이 연결 되어 있습니다.

+ -------- + ------ + ----------- +

┃       테이블명 : SPORT        ┃

+ -------- + ------ + ----------- +

┃ 기타1 ┃ 기타2 ┃ 특정항목 ┃

+ -------- + ------ + ----------- +

┃  abc1  ┃  abc2 ┃    축구   ┃

┃  abc3  ┃  abc4 ┃    축구   ┃

┃  abc5  ┃  abc6 ┃    농구   ┃

┃  abc7  ┃  abc8 ┃    야구   ┃

┃  abc9  ┃  abc0 ┃    농구   ┃

+ -------- + ------ + ----------- +

이때 축구를 갖는 항목 개수의 합을 '2' 로 얻고자 하고,

아래처럼 항목을 기입하여 항목 개수의 합을 얻을수 있게 하고 싶습니다.

변수['축구'] = 2

변수['농구'] = 2

변수['야구'] = 1

고수님들의 조언 여쭙습니다.

감사드립니다 고수님들.

|

답변 4개 / 댓글 11개

채택된 답변
+20 포인트
Copy
<?php 

$sql = "select 특정항목, count(*) cnt  from SPORT 

           group by 특정항목";

$result = mysqli_query($sql);

while ($row = mysqli_fetch_array($result)) {

    echo $row['특정항목']." : ".$row['cnt']."<br>";

}

로 하시면됩니다.

답변에 대한 댓글 8개

정말 감사드립니다.

이후 ..
변수['축구'] <-- 이렇게 기입하여, 2의 결과를 얻고자 한다면

$row['축구'] 이렇게 기입하면 값을 얻을수 있는것인가요 ?
화면출력에 변수['축구']' 라고 표기하고 싶으신거라면
[code]
echo "변수[".$row['특정항목']."] : ".row['cnt']."<br>";
[/code]
형태로 사용하시면 되지 않을까 싶네요
제가 드린 질의가 잘못되었습니다. 죄송합니다.
저는

<?php echo $row['축구'] ?> 이렇게 하였을 때 '2' 가 나오는지를 질의드렸습니다.

죄송합니다.
아니요 특정항목은 그룹핑된 컬럼값 : 축구 가 나오게 되고
row['cnt']는 그 그루핑된 값으로 카운트된 숫자의 합이 나옵니다.
많이 알지 못하여 질문 드리는 것도 죄송하네요 ...
원하는 항목을 포함하는 값의 합을 구하는 형태로 사용하고 싶은데요.

<?php echo $row['축구'] ?> 이렇게 찍었을 때 (축구 항목을 갖는 합) 2,
<?php echo $row['농구'] ?> 이렇게 찍었을 때 (농구 항목을 갖는 합) 2,

등등.. 이렇게 나오게 하려면 어떻게 하면 좋을지 질문드립니다 ..
<?php
$sql = "select 특정항목, count(*) cnt from SPORT
group by 특정항목";
$result = mysqli_query($sql);

$cnt_by= array()

while ($row = mysqli_fetch_array($result)) {
$cnt_by[ $row['특정항목'] ]= $row['cnt'];
}

echo $cnt_by["축구"];
해 보세요.
@포스티잇
위에 @엑스엠엘 님꼐서 좋은 예로 만들어주셨네요
서버가 다운되어 감사 인사가 많이 늦었습니다.
정말 감사합니다 센세!
2023-01-30 (월) 11:37:09

갯수가 필요하시면

count(*)

합이 필요하시면

sum( 해당 컬럼)

답변에 대한 댓글 1개

감사합니다! 잘 활용하겠습니다!
Copy
<?php
$conn = mysqli_connect("host", "user", "password", "database");

$result = mysqli_query($conn, "SELECT COUNT(*) FROM SPORT WHERE 특정항목 = '축구'");
$row = mysqli_fetch_assoc($result);
$sum_soccer = $row["COUNT(*)"];

$result = mysqli_query($conn, "SELECT COUNT(*) FROM SPORT WHERE 특정항목 = '농구'");
$row = mysqli_fetch_assoc($result);
$sum_basketball = $row["COUNT(*)"];

$result = mysqli_query($conn, "SELECT COUNT(*) FROM SPORT WHERE 특정항목 = '야구'");
$row = mysqli_fetch_assoc($result);
$sum_baseball = $row["COUNT(*)"];

$data = array(
    "축구" => $sum_soccer,
    "농구" => $sum_basketball,
    "야구" => $sum_baseball
);

print_r($data);
mysqli_close($conn);

 

// 결과

// Array ( [축구] => 2 [농구] => 2 [야구] => 1 )
?>

답변에 대한 댓글 1개

정말 감사합니다 많이 배웠습니다. 멋진 소스입니다!
Copy
<?php

$tbl = [
    ['기타1' => 'abc1', '기타2' => 'abc2', '특정항목' => '축구'],
    ['기타1' => 'abc3', '기타2' => 'abc4', '특정항목' => '축구'],
    ['기타1' => 'abc5', '기타2' => 'abc6', '특정항목' => '농구'],
    ['기타1' => 'abc7', '기타2' => 'abc8', '특정항목' => '야구'],
    ['기타1' => 'abc9', '기타2' => 'abc0', '특정항목' => '농구']
];

 

$grp = [];
foreach ($tbl as $row) { // while ($row = sql_fetch_array($result)) { ...
    $grp_k = $row['특정항목'];
    if (isset($grp[$grp_k]) != true) {
        $grp[$grp_k] = 0;
    }
    $grp[$grp_k]++;
}

 

print('<pre>');

print_r($grp);

print('</pre>');

?>

답변에 대한 댓글 1개

정말 감사드립니다. 너무많은 도움이 되었습니다.

답변을 작성하려면 로그인이 필요합니다.