首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的SQL -引用另一个表行的数据。

我的SQL -引用另一个表行的数据。
EN

Stack Overflow用户
提问于 2016-04-30 05:04:24
回答 2查看 136关注 0票数 2

我不知道这是否可能。我有两张桌子:

医院表中的列

  • hospitalID
  • 名字
  • AverageRating

分级表中的列

  • ID
  • rating1
  • rating2
  • rating3
  • rating4
  • rating5
  • rating6
  • hospitalID

rating1 to rating6是评级的类型。现在,通过calculation,我可以通过以下SELECT查询在ratings表中获得particular hospitalaverage rating

代码语言:javascript
复制
SELECT IFNULL((SUM(charges) + SUM(behaviour) + SUM(admission) + SUM(properInformation) 
                   + SUM(hygine) + SUM(treatment))/(count(hospitalID) * 6), 0
                  ) AverageRating,COUNT(ID) RatingCount 
   FROM ratings
   WHERE hospitalID = '111111'

上面的查询非常适合我,但是这个averageRating我也想在我的医院表中计算,因为我想给医院排序。

在mySQL中是否有任何函数可以通过引用收视率表来计算医院的平均评分。

评级表

查询输出表

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-30 05:31:40

根据给定的表结构,您可以尝试这样做。

编辑

代码语言:javascript
复制
SELECT avgratings.*, @curRow := @curRow + 1 AS hospitalRank
FROM (
    SELECT (SUM(r.`rating1`)+SUM(r.`rating2`)+SUM(r.`rating3`)+SUM(r.`rating4`)+SUM(r.`rating5`)+SUM(r.`rating6`))/(COUNT(r.`hospitalID`)*6) AS AverageRating, h.hospitalID
    FROM hospitals h INNER JOIN ratings r
    ON h.`hospitalID`=r.`hospitalID`
    WHERE 1 GROUP BY r.`hospitalID` 
) avgratings JOIN (SELECT @curRow := 0) rank
ORDER BY avgratings.AverageRating DESC

第二次查询以获得特定医院的级别。

代码语言:javascript
复制
SELECT tablea.*
FROM (
    SELECT avgratings.*, @curRow := @curRow + 1 AS hospitalRank
    FROM (
        SELECT (SUM(r.`rating1`)+SUM(r.`rating2`)+SUM(r.`rating3`)+SUM(r.`rating4`)+SUM(r.`rating5`)+SUM(r.`rating6`))/(COUNT(r.`hospitalID`)*6) AS AverageRating, h.hospitalID
        FROM hospitals h INNER JOIN ratings r
        ON h.`hospitalID`=r.`hospitalID`
        WHERE 1 GROUP BY r.`hospitalID` 
    ) avgratings JOIN (SELECT @curRow := 0) rank

) tablea
WHERE tablea.hospitalID=1 ORDER BY tablea.AverageRating DESC

WHERE块中的WHERE替换为hospitalID

票数 3
EN

Stack Overflow用户

发布于 2016-04-30 10:07:09

我不太明白你的问题.

您可以从以下几个方面获得一张唱片的平均价值:

代码语言:javascript
复制
charges + behaviour + admission + properInformation + hygine + treatment / 6

你可以得到总收益,因此:

代码语言:javascript
复制
avg(charges + behaviour + admission + properInformation + hygine + treatment / 6)

我要在每家医院拿到它,你可以按hospital_id分组:

代码语言:javascript
复制
select
  hospitalid,
  avg(charges + behaviour + admission + properinformation + hygine + treatment / 6) as avr,
  count(*) as rating_count
from ratings
group by hospitalid
order by 2 desc;

您可以通过加入医院表来选择医院数据(例如医院名称)。例如。

代码语言:javascript
复制
select
  h.hospitalid,
  h.name,
  avg(r.charges + r.behaviour + r.admission +
      r.properinformation + r.hygine + r.treatment / 6) as average_rating,
  count(*) as rating_count
from hospitals h
left join ratings r on r.hospitalid = h.hospitalid
group by h.hospitalid
order by average_rating desc;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36950979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档